文件处理补充与文件修改

文件的打开模式b模式(可以处理文本,图片,视频文件)
#强调:
#1、与t模式类似不能单独使用,必须是rb,wb,ab
#2、b模式下读写都是以bytes单位的
#3、b模式下一定不能指定encoding参数


#rb模式
# with open('1.jpg',mode='rb',) as f:
# data=f.read()
# print(data,)
# print(type(data))

# with open('db.txt',mode='rb',) as f:
# data=f.read() #
# print(data.decode('utf-8')) #bytes-----unicode
# print(type(data))


#wb模式:只写模式
# with open('b.txt',mode='wb') as f:
# msg='你好啊,吴三炮'
# f.write(msg.encode('gbk'))
# with open('b.txt',mode='wb') as f:
# msg='你好啊,吴三炮'
# f.write(msg.encode('utf-8'))

# with open('b.txt',mode='rb') as f:
# data=f.read()
# # print(type(data))
# print(data.decode('utf-8'))
# with open('1.jpg',mode='rb') as f:
# data=f.read()
# print(type(data))
# print(data.decode('utf-8'))


#ab模式:追加模式,将内容以二进制的形式写进内存,所以需要转换(encode)
# with open('b.txt',mode='ab') as f:
# f.write('你好'.encode('utf-8'))


# with open('1.jpg','rb') as f:
# for line in f:
# print(line)
# 掌握
f.read() # 读取所有内容,光标移动到文件末尾,文件数据过大时不推荐使用这个方法
f.readline() # 读取一行内容,光标移动到第二行首部
f.readlines() # 读取每一行内容,存放于列表中

f.write('1111\n222\n') # 针对文本模式的写,需要自己写换行符
f.write('1111\n222\n'.encode('utf-8')) # 针对b模式的写,需要自己写换行符
f.writelines(['333\n', '444\n']) # 文件模式
f.writelines([bytes('333\n', encoding='utf-8'), '444\n'.encode('utf-8')]) # b模式

# 了解
f.readable() # 文件是否可读
f.writable() # 文件是否可读
f.closed # 文件是否关闭
f.encoding # 如果文件打开模式为b,则没有该属性
f.flush() # 立刻将文件内容从内存刷到硬盘



文件修改


# with open('user.txt','r+',encoding='utf-8') as f:
# f.seek(9) #偏移量的单位是字节,移动的是光标
# # print(f.tell())
# f.write('[老男孩第二帅的人]')


#修改文件方式一:
#1、先把文件内容全部读入内存
#2、然后在内存中完成修改
#3、再把修改后的结果覆盖写入原文件
#缺点:会在文件内容过大的情况下,占用过多的内存


# with open('user.txt',mode='r',encoding='utf-8') as f:
# data=f.read()
# data=data.replace('吴佩其','吴佩其[老男孩第二帅的人]')
#
# with open('user.txt',mode='w',encoding='utf-8') as f:
# f.write(data) #将新内容覆盖在之前的文件内容上


#修改文件方式二:
#1、以读的方式打开原文件,以写的方式打开一个新文件,原则也是以新文件覆盖旧文件
import os

with open('user.txt',mode='rt',encoding='utf-8') as read_f,\
open('user.txt.swap',mode='wt',encoding='utf-8') as write_f:

for line in read_f:
if '吴佩其' in line:
line=line.replace('吴佩其','吴佩其[老男汉特别特别的老]')

write_f.write(line)

os.remove('user.txt')
os.rename('user.txt.swap','user.txt')

posted @ 2018-03-23 15:07  鲁之敬  阅读(176)  评论(0编辑  收藏  举报