当前位置: Python基础教程 > 11-文件操作 > 阅读正文

python文件读写

2021.6.23.   346 次   2216字

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+会清空内容

本篇完,还有疑问?

加入QQ交流群:11500065636 IT 技术交流群