1、打开文件
open()函数简介 :
打开文件使用open函数,可以打开一个已经存在的文件,如果没有这个文件的话,会创建一个新文件
完整的语法格式为:
| 1 | open(file, mode='r', buffering=-1, encoding=None, errors=None, newline=None, closefd=True, opener=None) |
| 1 2 3 4 5 6 7 8 9 | 参数说明:(一般只会用到前三个) file: 必需,文件路径(相对或者绝对路径)。 mode: 可选,文件打开模式 encoding: 一般使用utf8 buffering: 设置缓冲 errors: 报错级别 newline: 区分换行符 closefd: 传入的file参数类型 opener: 设置自定义开启器,开启器的返回值必须是一个打开的文件描述符。 |
| 1 2 3 4 5 6 7 8 9 10 11 | ''' 文件打开模式 r 以只读方式打开文件,文件的指针将会放在文件的开头,这是默认模式。 w 打开一个文件只用于写入。如果该文件已经存在则将其覆盖,如果不存在,创建新文件。 r+ 打开一个文件用于读写,文件指针将会被放在文件的开头。 w+ 打开一个文件用于读写。如果该文件已经存在则将其覆盖,如果不存在,创建新文件。 rb+ 以二进制格式打开一个文件用于读写。文件指针将会放在文件的开头。 wb+ 以二进制格式打开一个文件用于读写。如果该文件已经存在则将其覆盖,如果不存在,创建新文件。 a 打开一个文件用于追加,如果文件已经存在,文件指针将会放在文件的结尾,也就是说,新的内容将会被写到已有内容之后。 如果文件不存在,创建新的文件进行写入。 ''' |
encoding一般默认是gbk,为中文编码,但通常都是以utf-8写入和读取最好在打开文件时指定编码类型
打开文件,没有的话自动创建一个文件
| 1 | File1_Object = open('Text1.txt', 'w', encoding='utf-8') # 返会一个文件对象赋值给File1_Object |
此时左边工程栏会出现一个文件

2、写入
默认形式写入
| 1 2 3 4 | File1_Object = open('Text1.txt', 'w', encoding='utf-8') File1_Object.write('始知相忆深\n') # 往该对象里写入内容 File1_Object.write('直道相思了无益,未妨惆怅是清狂\n') File1_Object.close() # 保存并关闭 |
此时打开文件,会有以下内容

以二进制的形式打开并写入
| 1 2 3 4 5 | File2_Object = open('Text2.txt', 'wb') File2_Object.write('我喜欢的人要心若明镜,眼若星辰,便是看尽人间丑恶,也依然心怀善良,优雅从容!\n'.encode('utf-8')) # .encode('utf-8') str->bytes # 不加的话会报错 TypeError: a bytes-like object is required, not 'str' File2_Object.close() |


注意,以二进制形式操作文件,不管是写入和读取都不加encoding,否则会报错
如果加encoding='utf-8'的话,会有以下错误显示:

不加encoding的情况
| 1 2 3 4 5 6 | # 后面不加encoding='utf-8',默认为gbk File5_Object = open('Text3.txt', 'w') File5_Object.write('将头发梳成大人摸样\n') File5_Object.write('换上一身帅气西装\n') File5_Object.write('等回来见你一定比想象美\n') File5_Object.close() |

此时打开Text3会有以下显示:

点击箭头指向位置,将会显示出内容:

3、追加
一般追加形式
| 1 2 3 | File3_Object = open('Text1.txt', 'a', encoding='utf-8') File3_Object.write('我喜欢的人要心若明镜,眼若星辰,便是看尽人间丑恶,也依然心怀善良,优雅从容!\n') File3_Object.close() |
此时Text1里面的内容为:

对Text2进行追加:
| 1 2 3 | File2_Object = open('Text2.txt', mode='ab') File2_Object.write('处处相思苦!'.encode('utf-8')) File2_Object.close() |

对Text3进行追加
如果此时加了encoding=‘uft-8'
| 1 2 3 | File5_Object = open('Text3.txt', 'a', encoding='utf-8') File5_Object.write('纱窗醉梦中') File5_Object.close() |
打开文件Text3

仍会显示异常,此时需点击箭头指向位置,会显示:

点击utf-8的话会显示:

所以当文件第一次打开写入时没有加encoding时,后续进行操作也不要加,不然会有乱码,加了encoding的话,编码格式后续也不要改变。
此时删掉encoding=‘utf-8',文件内容为正常
| 1 2 3 | File5_Object = open('Text3.txt', 'a') File5_Object.write('纱窗醉梦中') File5_Object.close() |

4、读文件
read(),将文件的内容全部读取出来。
| 1 2 3 | File4_Object = open('Text1.txt', 'r', encoding='utf-8') print(File4_Object.read()) File4_Object.close() |

read(num),传入一个参数,表示读取指定字符个数
| 1 2 3 4 5 | File4_Object = open('Text1.txt', 'r', encoding='utf-8') print(File4_Object.read(4)) # 只读取前四个字符 print(File4_Object.read()) # 第二次读取将从上一次读取的位置继续读取 File4_Object.close() print() |

readline() 一次性读一行
| 1 2 3 4 5 | File4_Object = open('Text3.txt', 'r') print(File4_Object.readline()) print(File4_Object.readline()) # 第二次读取将从第二行开始 print(File4_Object.readline()) File4_Object.close() |

readlines() 按行读取,一次性读取所有内容,返回一个列表,每一行内容作为一个元素
| 1 2 3 | File5_Object = open('Text3.txt', mode='r') print(File5_Object.readlines()) File5_Object.close() |

以二进制形式读文件
| 1 2 3 4 5 6 7 8 9 10 11 | File5_Object = open('Text2.txt', 'rb') content = File5_Object.read() print(content.decode('utf-8')) # decode解码 # 由于原来Text2文件时以二进制形式打开并写入的,此时解码就直接用utf-8,不能用gbk File5_Object.close() File5_Object = open('Text3.txt', 'rb') content = File5_Object.readline() # 只读取一行 print(content.decode('gbk')) # 而Text3第一次创建并写入时是以默认gbk的形式写入的,此时只能用gbk解码 File5_Object.close() |
复制讲解

with上下文管理对象,可以自动释放打开的对象,防止忘记close()操作
所有评论(0)