Day 08 文件的读:写:追加等操作
01 今日内容大纲
- 文件操作的初识
- 文件操作的读
- 文件操作的写
- 文件操作的追加
- 文件操作的其他模式
- 文件操作的其他功能
- 打开文件的另一种方式
- 文件操作的改
02 昨日内容回顾以及作业讲解
-
数据类型的补充
- str:pass
- tuple
- (1)---->int 无逗号
- count index
- list:
- sort sort(reverse = True) reverse()
- 列表相加 与数字相乘
- 循环列表问题(不要改变列表大小)
- dic:
- update 更新,增加值,修改值,创建字典,将一个字典的所有键值对覆盖添加到另一个字典
- dict.fromkeys(iterable,value) value可变时公用一个#面试
- 循环字典的问题
- 数据类型的转换问题:
- 0,{},[],set(),'',None---->False
-
编码的进阶:
ASCII,gbk,Unicode,utf-8,big5.......
-
所有编码本(除Unicode之外)不能直接识别.
-
在内存中所有的数据必须是Unicode编码存在,除了bytes
帮计算机区分不同的类型的数据,根据不同的类型,来进行不同的计算
int
bool
tuple <==> str <>bytes
list
dict
set
-
03 今日内容
-
文件操作的初识
-
taibai.txt
-
利用Python代码写一个很low的软件,去操作文件.
- 文件路径:path
- 打开方式:读,写,追加,读写,写读.......
- 编码方式:utf-8,gbk,gb2312(一般指信息交换用汉字编码字符集)......
-
f1 = open(r'D:\taibai.txt',encoding='utf-8',mode='r') # r 防止\与数字字母结合,影响文件的读写,相对路径下的文件不需要r content = f1.read() print(content) f1.close() -
代码解释:
open 内置函数,open底层调用的是操作系统的接口. f1,变量,f1,fh,file_handler,f_h, 文件句柄.对文件进行的任何操作都得通过文件句柄的方式. encoding:可以不写---->不写参数的话为 默认编码本:操作系统的默认编码 windows: gbk linux: utf-8 mac: utf-8 f1.close():关闭文件句柄 防止占用过多的内存 # with as下不需要 -
文件操作的三部曲:
- 打开文件
- 对文件句柄进行相应操作
- 关闭文件
-
报错原因:
-
UnicodeDecodeError:文件存储时 与 文件打开时 的编码本运用不一致
-
路径分隔符产生的问题
-
r'C:\Users\oldboy\Desktop\taibai.txt'
-
-
-
-
文件操作的读
r,rb,r+,r+b 四种模式
r:read()** read(n),readline(),readlines()
for***
rb:操作的是非文本的文件,图片,视频,音频
文件操作的读
'''老男孩最好的老师
老男孩教育是最好的学校
fhsjdkfha
fhdsfads'''
# read 全部读出来 **
f = open('文件的读',encoding='utf-8',mode='r')
content = f.read()
print(content)
f.close()
# read(n) 按照 字符(不是字节) 读取
f = open('文件的读',encoding='utf-8',mode='r')
content = f.read(4)
print(content) #abc太
# readline() 读取一行
f = open('文件的读',encoding='utf-8',mode='r')
print(f.readline())
print(f.readline())
print(f.readline())
'''
abc太白金星最帅
老男孩最好的老师
老男孩教育是最好的学校
'''
# readlines() #返回一个列表,列表中的每一个元素是源文件的每一行.
f = open('文件的读',encoding='utf-8',mode='r')
content = f.readlines()
for i in content:
print(i)
'''
abc太白金星最帅
老男孩最好的老师
老男孩教育是最好的学校
fhsjdkfha
fhdsfads
'''
print(content) #['abc太白金星最帅\n', '老男孩最好的老师\n', '老男孩教育是最好的学校\n', 'fhsjdkfha\n', 'fhdsfads\n']
f.close()
# for 读取 ##每一行读一次,然后再读下一行,节省内存
f = open('文件的读',encoding='utf-8',mode='r')
for line in f:
print(line)
f.close()
#rb 读(操作的是非文本的文件:图片,视频,音频...)(不需要写encoding!!!!!)
f = open('风景.jpg',mode='rb')
pic = f.read()
print(pic)
f.close()
'''f4\'\xd2\xaeX\xeaW\x12\\5\xb0\x8a[f#\xf7\x98S\x9e;\x82N8\xf4\xa4\xe9\xe8TW.\xac\xbe\x97)v\xaa\x05\xb4\
xaas\xb0v\x18\xfa\x9e\x7f*\xbf\r\xa5\xbe\xef\xef\x01\x93\x9d\xdc\xb9\xact\xb8\xb6a\x1cv\xef\xe6\xb1\xe7;\x89\xfet\
x976\x9a\x8d\xf3y\x11\\\xfd\x8e\xd4\x1f\xf5qr_\x1e\xbd\xb9\x15\x1c\x9eb\xd1\xea\xd9\xb5gkew\x1a\x98%l\xe4\x806.......'''
文件操作的写
w,wb,w+,w+b 四种模式
+ 没有文件,则创建文件,写入内容
+ 如果文件存在,则清空原文件,再写入新的内容
```python
# 文件操作的写
# 没有文件,则创建文件,写入内容:
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')
pic = f.read()
print(pic)
f.close()
f_new = open('风景2.jpg',mode='wb')
f_new.write(pic)
f.close()
-
文件的追加
a,ab,a+,a+b 四种模式
# 没有文件则创建文件,追加内容 f = open('文件的追加',encoding='utf-8',mode='a') f.write('我再追加一句,太白是真的丑') f.close() # 有文件,则在原文件的最后面追加新内容 f = open('文件的追加',encoding='utf-8',mode='a') f.write('是真的,不信你看') 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()
-
seek()
-
flush()
#文件操作的其他功能 # tell 获取光标的位置,单位:字节。 f = open('文件的读写',encoding='utf-8',) #mode = 'r'可以省略 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('奥术大师克里斯安吉尔') f.flush() f.close()
-
-
-
打开文件的另一种方式:
# # 打开文件的另一种一种方式 # # 优点1:不用关闭文件文件句柄 with open('文件的读',encoding='utf-8') as f1: print(f1.read()) # 优点2:可以同时打开多个文件: with open('文件的读',encoding='utf-8') as f1,\ open('文件的写',encoding='utf-8',mode='w') as f2: print(f1.read()) f2.write('阿三大苏打实打实') # 缺点:待续
-
文件操作的改
''' 1, 以读的模式打开原文件。 2,以写的模式创建一个新文件。 3,将原文件的内容读出来修改成新内容,写入新文件。 4,将原文件删除。 5,将新文件重命名成原文件。 ''' # low版 import os with open('alex的自述',encoding='utf-8') as f1,\ open('alex的自述.bak',encoding='utf-8',mode='w') as f2: 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 with open('alex的自述',encoding='utf-8') as f1,\ open('alex的自述.bak',encoding='utf-8',mode='w') as f2: for line in f1: new_line = line.replace('SB','alex') f2.write(new_line) os.remove('alex的自述') os.rename('alex的自述.bak','alex的自述') # 关于清空问题: # 关闭文件句柄,再次以w模式打开文件时,才会清空. with open('文件的写',encoding='utf-8',mode='w') as f1: for line in range(9): f1.write('123456789')
04 今日总结
文件操作:
- r w a rb wb r+ ab 重点记
- read() write tell seek flush
- 文件的改的代码必须会默写。
浙公网安备 33010602011771号