文件操作 08
-
文件操作的初识
- 一个神秘的联系方式.txt
- 利用python 代码写一个很low的软件,去操作文件。
- 文件路径:path
- 打开方式:读 写 追加 读写 写读等
- 编码方式: utf-8 gbk gbk2312等
f1 = open('E:\一个神秘的联系方式.txt',encoding='utf-8',mode='r') content = f1.read() print(content) f1.close()
-
文件操作三个步骤:
- 打开文件
- 对文件句柄进行相应的操作
- 关闭文件
-
报错原因
-
UnicodeDecodeError:文件存储时与文件打开时编码本运用不一致。
-
路径分隔符产生问题:
加r r'E:\一个神秘的联系方式.txt' 加\\ 'E:\\一个神秘的联系方式.txt'
-
-
文件操作的读
r, rb , r+ , r+b ,四种模式
r : read()** read(n) readline() readlienes()
for ***
rb : 操作的是非文本的文件。图片,视频,音频。
# f = open('E:\文件1.txt',encoding='utf-8',mode='r') # s = f.read() # print(s) # f.close() #readlines 返回一个列表,列表中的每个元素是原文件的每一行 # f = open('E:\文件1.txt',encoding='utf-8',mode='r') # s = f.readlines() # print(s) # f.close() #for 读取 # f = open('E:\文件1.txt',encoding='utf-8') # for line in f: # print(line) # f.close() # f = open('A{$DQMY5PVV0KEWW~(BB]6S.png',mode='rb') # for line in f: # print(line) # f.close()
-
文件操作的写
w , wb , w+ , w +b 四种模式
#没有文件,创建文件,写入内容 # f = open('文件的写',encoding='utf-8',mode='w') # f.write('随便写上一点') # f.close() #如果文件存在,先清空原文件内容,在写入新的内容 # f = open('文件的写',encoding='utf-8',mode='w') # f.write('holting 很牛') # f.close() #wb # f = open('A{$DQMY5PVV0KEWW~(BB]6S.png',mode='rb') # conent = f.read() # f.close() # f1 = open('tupian.png',mode='wb') # f1.write(conent) # f1.close()
-
文件操作的追加
a , ab , a+ ,a+b 四种模式
没有文件创建文件,追加内容 f = open('文件追加',encoding = 'utf-8',mode='a') f.write('henhao') f.close() 有文件,在原文件的最后面追加内容 f = open('文件追加',encoding = 'utf-8',mode='a') f.write('xuexi') f.close()
-
文件操作的其他模式 r+
读写追加 #顺序不能错误 f = open('文件的读写',encoding='utf-8',mode='r+') content =f.read() f.write('人的一切痛苦,本质上都是对自己无能的愤怒,,') f.close() 错误示例: # f = open('文件的读写', encoding='utf-8', mode='r+') # f.write('人的一切痛苦,,,本质都是对自己无能的愤怒,,,') # content = f.read() # print(content) # f.close()
-
文件操作的其他功能
总结:
三大方向:
读:四种模式 r rb r+ r+b
写:四种模式 w wb w+ w +b
追加: 四种模式 a ab a+ a+b
相应的功能:对文件的句柄的操作:read read(n)readline() readlines() write()
#tell 获取光标的位置,单位字节 # f = open('文件的写', encoding='utf-8') # print(f.tell()) # content = f.read() # # print(content) # print(f.tell()) # f.close() #seek 调整光标的位置 # f = open('文件的写', encoding='utf-8') # f.seek(7) # content = f.read() # print(content) # f.close() #flush 强制刷新 # f = open('文件的其他功能', encoding='utf-8',mode='w') # f.write('fdshdsjgsdlkjfdf') # f.flush() # f.close()
-
打开文件的另一种方式
优点1:不用手动关闭文件句柄 with open('文件的读',encoding='utf-8') as f1: print(f1.read()) with open('文件的读',encoding='utf-8') as f1,\ open('文件的写',encoding='utf-8') as f2: print(f1.read()) f2.write('holting') 缺点: 待续
-
文件操作的改
-
文件操作改的流程:
- 以读的模式打开原文件
- 以写的模式创建一个新的文件
- 将原文件读出来修改成新内容,写入新文件
- 将原文件删除
- 将原文件重命名成原文件
-
具体代码
#low版 # import os # with open('文件的写',encoding='utf-8') as f1,\ # open('文件的写.bak',encoding='utf-8',mode='w') as f2: # old_content =f1.read() # new_content =old_content.replace('我','你') # f2.write(new_content) # os.remove('文件的写') # os.rename('文件的写.bak','文件的写') #进阶版 import os with open('文件的写',encoding='utf-8') as f1,\ open('文件的写.bak',encoding='utf-8',mode='w') as f2: for line in f1: new_line = line.replace('我','你') f2.write(new_line) os.remove('文件的写') os.rename('文件的写.bak','文件的写') # 有关清空的问题: # 关闭文件句柄,再次以w模式打开此文件时,才会清空。 # with open('文件的写', encoding='utf-8',mode='w') as f1: # for i in range(9): # f1.write('holting')
-
文件操作:
- r w a rb wb r+ ab 重点记
- read() write tell seek flush
- 文件的改的代码必须会默写。
注意
dic = {} cars = ['鲁A32444','鲁B12333','京B8989M','⿊C49678','⿊C46555','沪 B25041'] locals = {'沪':'上海', '⿊':'⿊⻰江', '鲁':'⼭东', '鄂':'湖北', '湘':'湖南','京':'北京','黑':'黑龙江'} # 方法一 for i in cars: # if locals[i[0]] not in dic: # dic[locals[i[0]]] = 1 # else: # dic[locals[i[0]]] += 1 # print(dic) 方法二 # for i in cars: # dic[locals[i[0]]] = dic.get(locals[i[0]],0) + 1 # print(dic)