博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Day2_and_Day3 文件操作
阅读量:6406 次
发布时间:2019-06-23

本文共 2783 字,大约阅读时间需要 9 分钟。

文件修改操作:

文件的修改操作:文件并没有修改操作,实际是将一个编写的新文件覆盖了原有的文件

替换文件中的某个内容:

with open('old.txt','r',encoding='utf-8') as read_f,\

  open('.old.txt.swap',swap,'w',encoding='utf-8') as write_f:

  msg=read_f.read()

  msg=msg.replace('alex','SB')

  print(msg)

  wirte_f.write(msg)

os.remove('old.txt')  #删除原有的文件

os.rename('.old.txt.swap','old.txt')  #将交换文件替换为原有的文件

然后再替换回来:

with open('old.txt','r',encoding='utf-8') as read_f,\

  open('.old.txt.swap',swap,'w',encoding='utf-8') as write_f:

  for line in read_f:

    if 'SB' in line:

      line=line.replace('SB','alex')

    write_f.write(line)

os.remove('old.txt')  #删除原有的文件

os.rename('.old.txt.swap','old.txt')  #将交换文件替换为原有的文件

 

字符编码:把人类的字符翻译成计算机能认识的数字。

字符编码表:就是一张字符与数字对应关系的表

eg:

  ascii

   gbk

  utf-8

   unicode unicode---->encode('utf-8')------>bytes

   bytes------>decode('utf-8')------>unicode

原则:字符以什么格式编译的,就要以什么格式解码。

  python3中字符串分为两种: x='egon' 存成unicode y=x.encode('utf-8')存成bytes
  python2中字符串分为两种: x=u'egon'与python3中的字符串是一样的 y='alex'与python3中的bytes一样

 

f=open('a.txt','r',encoding='utf-8')

  #当文件不存在的时候,不会创建文件,会报错 f.read()

  #向操作系统发起调用

b模式:即直接从硬盘中读取bytes

  f=open('a.txt','rb') print(f.read().decode('utf-8'))

写模式: f=open('a.txt','w',encoding='utf-8')

  w文本模式的写,文件存在则清空,不存在的话则创建

  f.write('aaaa\n') f.write('bbb\n')

#写一行 f.newlines('111111\n','sdsa\n')

#写多行 a文本追加模式,文件不存在创建,文件存在将光标移到最后一行 f=open('b.txt','a',encoding='utf-8')

r+,w+,a+ 分别代表读的时候可以写,写的时候可以读,追加的时候可以读。

  rb模式即直接从硬盘中读取bytes f=open('a.txt','rb') print(f.read())

wb模式,写入的时候以二进制写入 f=open('a.txt','wb') f.write('你真红'.encode('utf-8'))

  对于图片或者对于其他不是字符文件的复制操作:

 

f=open('test.jpg','rb')print(f.read())with open('test.jpg','rb') as read_f,open('test1.jpg','wb') as write_f:    for line in read_f:        write_f.write(line)

 

#写一个小程序

 

import sys#python3 copy.py source.file target.fileif len(sys.argv) < 3:    print('Usage:python3 copy.py source.file target.file')    sys.exit()with open(r'%s'%sys.argv[1],'rb') as read_f,open(r'%s'%sys.argv[2],'wb') as write_f:    for line in read_f:        write_f.write(line)

 

因为在window中涉及路径的问题,当存在\的时候可能会使某些字符失效。所以就利用 r 来进行转义。

用法: r%s %sys.argv 这样

文件内光标的移动:

  1,文件打开方式为文本模式打开时,代表读取三个字符。

  f=open('a.txt','r')

  print(f.read(3))

  2,文件打开方式为b模式时,代表读取三个字节。(读取的不是3的整数倍的时候,不能解码)

  f=open('a.txt','rb')

  print(f.read(6).decode('utf-8'))

  f.seek(0) #将光标移动开头,第0个位置。

  f.seek(3,1) #1代表的含义是相对于当前位置向后读取了三个位置

  f.seek(0,2) #相当于移动从文章最后移动几个位置

 

#练习,写一个类似于linux 下类似于tail的脚本,总是显示最后一行

 

import timeimport syswith open(r'%s' % sys.argv[2],'rb') as f:    f.seek(0,2)    while True:        line = f.readline()        if line:            print(line.decode('utf-8'),end='')        else:            time.sleep(0.2)

 

 

truncate:截断文件,只读取部分内容

f.truncate(9)只截取9个字节,剩下的都会被清空

 

with open('a.txt','r+',encoding='utf-8') as f:    f.truncate(6)

 

转载于:https://www.cnblogs.com/sexiaoshuai/p/7204466.html

你可能感兴趣的文章
使用crond构建linux定时任务及日志查看
查看>>
地图绘制初探——基于maptalks的2.5D地图绘制
查看>>
SpringBoot2.0之七 实现页面和后台代码的热部署
查看>>
Git 仓库大扫除
查看>>
设计模式-单例模式
查看>>
es6基础0x014:WeakMap
查看>>
九种 “姿势” 让你彻底解决跨域问题
查看>>
php中mysqli 处理查询结果集总结
查看>>
你不知道的JavaScript运算符
查看>>
小程序开发注意事项
查看>>
ECMAScript7规范中的instanceof操作符
查看>>
Hadoop HDFS原理分析
查看>>
【webpack4】基本配置和入门api
查看>>
Mac使用ssh公钥登录Linux
查看>>
【366天】跃迁之路——程序员高效学习方法论探索系列(实验阶段124-2018.02.06)...
查看>>
POJ3070-Fibonacci(矩阵快速幂)
查看>>
[vue插件]基于vue2.x的电商图片放大镜插件
查看>>
标准的组件结构
查看>>
vue——一个页面实现音乐播放器
查看>>
SVG 扬帆起航
查看>>