- 文件句柄的创建
使用open()创建一个文件句柄并返回。
f = open('游戏人生',mode='r',encoding='utf-8') s = f.read() print(s) f.close()
使用open()会造成经常忘记关闭文件造成错误。
在文件操作过程中,如果忘记关闭文件,对文件操作的结果不会实时反映到文件中,只有文件关闭了,才会把改变文件。(我自己试的)
为了避免忘记关闭文件或者是为了同时创建多个文件,可以使用with创建文件句柄。
with open('游戏人生',mode='r',encoding='utf-8') as f, open('漫画人生', mode='r', encoding='utf-8') as g: s = f.read() print(s) s1 = g.read() print(s1)
with操作会自动关闭文件
- 只读、只写与追加(mode='')
可以在open的参数mode=‘模式’中设置文件打开的方式,分为只读,只写、追加,读写,写读,追加读。对应字母‘r’,'w','a','r+','w+','a+'
只读模式表示文件只能读,如果对文件进行写操作会报错
只写模式表示文件只能写,如果对文件进行读操作会报错(只写模式在打开文件时会把文件中的原数据全部清空)
追加模式打开文件,会将光标自动定位到文件末尾,并只能写。
读写模式打开会将光标是指在文件开头,写入时会替换文件中原来的数据,在写入操作后进行读的话只会返回违背修改的数据
with open('游戏人生',mode='r+',encoding='utf-8') as f: f.write('文件') s = f.read() print(s)
写读模式打开文件会直接将文件中的内容清空,然后写入数据,由于文件中原来的数据已经被全部删除,所以再对文件进行读操作会是空白。
with open('游戏人生',mode='w+',encoding='utf-8') as f: f.write('文件') f.seek(0) # 移动光标否则结果为空白 s = f.read() print(s)
追加读模式打开文件会将光标定位在文件结尾,然后进行读写操作(由于光标在文件末尾,所以直接读会是空白)
with open('游戏人生',mode='a+',encoding='utf-8') as f: f.write('文件') f.seek(0) # 移动光标否则结果为空白 s = f.read() print(s)
除了读模式不能写,写模式不能读意外,其他模式的区别仅仅在于光标的初始位置。
- 以bytes格式操作文件
在mode='模式b'中加入b即可将文件读取模式为以bytes格式读取文件,这种模式在处理非文本文件时会使用
with open('游戏人生',mode='rb') as f: s = f.read() print(s) # 输出结果为b'xe6x96x87xe4xbbxb6xe6x96x87xe4xbbxb6'
由于是以bytes格式读写文件,所以不能设置编码方式
- 文件的功能详解
f.seek() # 调整光标的位置 f.tell() # 返回光标的位置 f.truncate() # 截取文件 f.readable() # 确认文件是否可读 f.writable() # 确认文件是否可写 f.readline() # 一行一行的读文件 f.readlines() # 将文件的每一行作为列表的一个元素生成列表
- 文件修改
文件操作中没有修改操作,一般通过创建新的备份文件,删除源文件,再将备份文件重命名为原来的文件名实现的。
'''将点绛唇中的错别字,千千改为纤纤 点绛唇 蹴罢秋千,起来慵整千千手。露浓花瘦,薄汗轻衣透。 见客入来,袜刬金钗溜。和羞走,倚门回首却把青梅嗅。 ''' import os with open('点绛唇','r',encoding='utf-8') as f, open('点绛唇.bak','w',encoding='utf-8') as f1: for line in f: if '千千' in line: line = line.replace('千千','纤纤') f1.write(line) os.remove('点绛唇') os.rename('点绛唇.bak','点绛唇')