python文件操作主要有4种
- 打开文件 –> open
- 读取文件内容 –> read
- 写内容到文件 –> write
- 关闭文件 –>close
打开与关闭文件
打开文件,使用open函数,有多个参数,将返回该文件对象
open(file, mode='r', buffering=-1, encoding=None, errors=None, newline=None, closefd=True, opener=None)
参数说明:
- file: 必需,文件名(相对或者绝对路径)。
- mode: 可选,文件打开模式
- buffering: 设置缓冲
- encoding: 一般使用utf8
- errors: 报错级别
- newline: 区分换行符
- closefd: 传入的file参数类型
- opener:设置自定义开启器,开启器的返回值必须是一个打开的文件描述符。
mode参数列表:
模式 | 描述 |
---|---|
t | 文本模式 (默认)。 |
x | 写模式,新建一个文件,如果该文件已存在则会报错。 |
b | 二进制模式。 |
+ | 打开一个文件进行更新(可读可写)。 |
U | 通用换行模式(不推荐)。 |
r | 以只读方式打开文件。文件的指针将会放在文件的开头。这是默认模式。 |
rb | 以二进制格式打开一个文件用于只读。文件指针将会放在文件的开头。这是默认模式。一般用于非文本文件如图片等。 |
r+ | 打开一个文件用于读写。文件指针将会放在文件的开头。 |
rb+ | 以二进制格式打开一个文件用于读写。文件指针将会放在文件的开头。一般用于非文本文件如图片等。 |
w | 打开一个文件只用于写入。如果该文件已存在则打开文件,并从开头开始编辑,即原有内容会被删除。如果该文件不存在,创建新文件。 |
wb | 以二进制格式打开一个文件只用于写入。如果该文件已存在则打开文件,并从开头开始编辑,即原有内容会被删除。如果该文件不存在,创建新文件。一般用于非文本文件如图片等。 |
w+ | 打开一个文件用于读写。如果该文件已存在则打开文件,并从开头开始编辑,即原有内容会被删除。如果该文件不存在,创建新文件。 |
wb+ | 以二进制格式打开一个文件用于读写。如果该文件已存在则打开文件,并从开头开始编辑,即原有内容会被删除。如果该文件不存在,创建新文件。一般用于非文本文件如图片等。 |
a | 打开一个文件用于追加。如果该文件已存在,文件指针将会放在文件的结尾。也就是说,新的内容将会被写入到已有内容之后。如果该文件不存在,创建新文件进行写入。 |
ab | 以二进制格式打开一个文件用于追加。如果该文件已存在,文件指针将会放在文件的结尾。也就是说,新的内容将会被写入到已有内容之后。如果该文件不存在,创建新文件进行写入。 |
a+ | 打开一个文件用于读写。如果该文件已存在,文件指针将会放在文件的结尾。文件打开时会是追加模式。如果该文件不存在,创建新文件用于读写。 |
ab+ | 以二进制格式打开一个文件用于追加。如果该文件已存在,文件指针将会放在文件的结尾。如果该文件不存在,创建新文件用于读写。 |
默认为文本模式,如果要以二进制模式打开,加上 b 。
关闭文件
这里指的是,关闭打开的文件流,使用 流对象.close()
打开文件时得到的其实是一个流对象,由于不再需要,在使用后应该关闭
读取文件内容
读取文件,使用read函数,默认会一次性读取所有数据,并返回char[]
read([size]) #默认是读取全部字节
文件读取实例
先创建一个测试文本文件,test.txt
这是一个测试文件
this is a test file
在main.py中写下如下代码
file = open("test.txt", encoding='utf-8') #制定文件编码,否则可能乱码
text = file.read()
print(text)
file.close() #使用完成后,应该关闭流
ps:对流对象来说,内部好像有一个指针,打开时指针在起始位置,读取一次后就到了末尾,所以无法再读取第二次
还有一个readline一次读取一行的方法, 可以用not判断是否读取到内容
写入文件
如果要把数据写入文件, 在打开时就需要指定打开方式,也就是mode参数
写一些数据,并保存为一个文件
file = open("hello.txt", mode="w", encoding='utf-8') #mode为w
file.write("hello,python") #写入的内容
file.close() #使用完成后,应该关闭流
运行后,会在同目录下生成一个hello.txt,并保存着写入的内容(如果已经存在此文件,再次写入会覆盖原来的内容)
追加内容到已有的文件
如果仅追加内容,可以使用mode=a即可
file = open("hello.txt", mode="a", encoding='utf-8')
file.write("追加的内容")
file.close() #使用完成后,应该关闭流
如果是灵活的增删,可以使用一个read和weirte配合, 等效于 r+
file_open = open("hello.txt", mode="r", encoding='utf-8')
text = file_open.read() #先读取
text = text+"bbb" #修改后的内容
file_write = open("hello.txt", mode="w", encoding="utf-8")
print(text)
file_write.write(text) #写回去
#使用完成后,应该关闭流
file_open.close()
file_write.close()
ps:读写时,r+不会清空内容,w+会清空内容