1 内容总览
- 文件操作的初识
- 文件操作的读
- 文件操作的写
- 文件操作的追加
- 文件操作的其他模式 r+
- 文件操作的其他功能
- 打开文件的另一种方式 - with open
- 文件操作的改---(很重要!!)
2 具体内容
文件操作的初识
护士空姐少妇的联系方式.txt
利用python代码写一个很low的软件,去操作文件。
- 文件路径:path
- 打开方式:读,写,追加,读写,写读......
- 编码方式:utf-8,gbk ,gb2312......
f1 = open('d:\主妇空姐模特联系方式.txt',encoding='utf-8',mode='r') #txt要写上! content = f1.read() print(content) f1.close() #f相当于锅的把手,操作文件的
代码解释:
open 内置函数,open底层调用的是操作系统的接口。 f1,变量,f1,fh,file_handler,f_h,文件句柄。 对文件进行的任何操作,都得通过文件句柄. 的方式。 encoding:可以不写,不写参数,默认编码本:操作系统的默认的编码 windows: gbk。 linux: utf-8. mac : utf-8. f1.close() 关闭文件句柄。 mode="r"代表模式是 读 #mode为"r"时,可不写,默认就是r
文件操作的三部曲:
- 1,打开文件。
- 2,对文件句柄进行相应操作。
- 3,关闭文件。
报错原因:
UnicodeDecodeError:文件存储时与文件打开时编码本运用不一致。
第二个错误: 路径分隔符产生的问题(在最前面加个r即可):
r'C:\Users\oldboy\Desktop\主妇空姐模特联系方式.txt'
文件操作的读
r , rb, r+,r+b 四种模式
r: read()** read(n) readline() readlines() for *** rb: 操作的是非文本的文件。图片,视频,音频。 #带b操作的,写open()时,不用写encoding!
# read 全部读出来 ** # f = open('文件的读', encoding='utf-8')#编码集可以不写,但windows系统默认gbk,linx苹果-utf-8 # content = f.read() #全读 # print(content,type(content)) # f.close() #注:文件全读取后,再次读取,读不到内容!!! # read(n) 按照字符读取 #读几个字 # f = open('文件的读', encoding='utf-8') # content = f.read(5) # print(content) # f.close() # readline() #只读第一行内容 # f = open('文件的读', encoding='utf-8') # print(f.readline()) # print(f.readline()) # print(f.readline()) # f.close() # readlines() 返回一个列表,列表中的每个元素是源文件的每一行。 # f = open('文件的读', encoding='utf-8') # l1 = f.readlines() # for line in l1: # print(line) # # print(l1) # f.close() # for 读取 # f = open('文件的读', encoding='utf-8') # # ['abc太白金星最帅\n', '老男孩最好的老师\n', '老男孩教育是最好的学校\n', 'fhsjdkfha\n', 'fhdsfads\n'] # for line in f: #for遍历文件句柄 -一行一行的读 # print(line) # f.close() # f = open('美女.jpg',mode='rb') # content = f.read() # print(content) # f.close()
文件操作的写
w,wb, w+,w+b 四种模式 #w+木有用!
# w-清空写 #注:分2步:先清空,再写入内容 #不管写入几次,都只有最后一次写入的内容 # 没有文件,创建文件,写入内容 # f = open('文件的写',encoding='utf-8',mode='w') # f.write('随便写一点') # f.close() # 如果文件存在,先清空原文件内容,在写入新内容 # f = open('文件的写',encoding='utf-8',mode='w') # f.write('太白最帅....') # f.close() # wb # f = open('美女.jpg',mode='rb') # content = f.read() # # print(content) # f.close() # # f1 = open('美女2.jpg',mode='wb') # f1.write(content) # f1.close()
文件操作的追加
a, ab, a+,a+b 四种模式 #a+也木有用 #a+ 追加写 读
# 没有文件创建文件,追加内容 # f = open('文件的追加',encoding='utf-8',mode='a') #在文件末尾追加内容 # f.write('太白最帅....') # f.close() # 有文件,在原文件的最后面追加内容。 # f = open('文件的追加',encoding='utf-8',mode='a') # f.write('大壮,舒淇,b哥,雪飞') # f.close()
文件操作的其他模式 r+
# 读并追加 # 顺序不能错误。 # f = open('文件的读写', encoding='utf-8', mode='r+') # content = f.read() # print(content) # 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()) #查看光标: tell() 有返回值 返回的就是当前光标的位置 # f.close() # seek 调整光标的位置 # f = open('文件的读写', encoding='utf-8') # f.seek(7) # content = f.read() # print(content) # f.close() seek 移动光标: seek(0,0) 文件开始位置 seek(0,1) 光标的当前位置 seek(0,2) 文件末尾位置 seek(3) 按照字节调节 使用utf-8是3 gbk是2 # flush 强制刷新 # f = open('文件的其他功能', encoding='utf-8',mode='w') # f.write('fdshdsjgsdlkjfdf') # f.flush() # f.close()
打开文件的另一种方式 - with open
# 优点1: 不用手动关闭文件句柄 # with open('文件的读',encoding='utf-8') as f1: #with open 是面向对象中的上下文管理 #as-作为 # print(f1.read()) # 优点2:可以打开(操作)多个文件 #也可以同时操作1个文件 with open('文件的读', encoding='utf-8') as f1,\ #加个逗号和换行符即可 open('文件的写', encoding='utf-8', mode='w')as f2: print(f1.read()) f2.write('hfdsjkghkajhsdjg') # 缺点:待续。
文件操作的改---(最重要!!)
- 文件操作改的流程:
1, 以读的模式打开原文件。
2,以写的模式创建一个新文件。
3,将原文件的内容读出来修改成新内容,写入新文件。
4,将原文件删除。
5,将新文件重命名成原文件。 - 具体代码:
# low版 # import os # # 1, 以读的模式打开原文件。 # # 2,以写的模式创建一个新文件。 # with open('alex自述',encoding='utf-8') as f1,\ # open('alex自述.bak',encoding='utf-8',mode='w') as f2: # # 3,将原文件的内容读出来修改成新内容,写入新文件。 # old_content = f1.read() # new_content = old_content.replace('alex', 'SB') # f2.write(new_content) # os.remove('alex自述') # os.rename('alex自述.bak','alex自述') # 进阶版: import os # 1, 以读的模式打开原文件。 # 2,以写的模式创建一个新文件。 with open('alex自述',encoding='utf-8') as f1,\ open('alex自述.bak',encoding='utf-8',mode='w') as f2: # 3,将原文件的内容读出来修改成新内容,写入新文件。 for line in f1: # 第一次循环 SB是老男孩python发起人,创建人。 new_line = line.replace('SB', 'alex') f2.write(new_line) os.remove('alex自述') os.rename('alex自述.bak','alex自述') #(old new) # 有关清空的问题: # 关闭文件句柄,再次以w模式打开此文件时,才会清空。 # with open('文件的写', encoding='utf-8',mode='w') as f1: # for i in range(9): # f1.write('恢复贷款首付款')
- 文件操作改的流程:
3 understand and remember
- 文件操作:
- r w a rb wb r+ ab 重点记
- read() write tell seek flush
- 文件的改的代码必须会默写。