文件处理的基本操作包含四步:打开文件,读取文件,写入文件,关闭文件(close函数)。本文会按照这四个步骤分别介绍Python中是如何处理文件的。
一,打开文件
1,open方法()
函数及参数:open(file, mode='r', buffering=-1, encoding=None, errors=None, newline=None, closefd=True, opener=None)
参数说明:
参数 | 说明 |
file | 文件路径 |
mode | 打开方式 |
buffering | 缓存机制:1,表示使用缓存机制,-1表示使用系统默认 ,0表示不适用缓存机制,只对Binary有效 |
encoding | 编码格式 |
newline | 换行符 |
2,打开方式参考
模式 | 说明 |
r | 只读模式,打开后不能执行写操作 |
w | 只写模式,文件存在被清空,打开后不能执行读操作 |
x | 创建新文件,以只写方式打开,若文件存在报错 |
a | 追加模式 |
+ | 读写方式打开 |
r+ | 读写方式打开 |
w+ | 读写方式打开,文件存在被清空 |
二进制方式 | rb, wb, xb, rb+, wb+ ,场景:图片,二进制文件等 |
3,读写方式示例:
1)基本读写
#定义读取函数
def read_file(fpath):
fr = open(fpath)
content = fr.read()
if content:
print(content)
else:
print("文件内容为空")
f.close()
#定义写入函数
def write_file(fpath, content = ""):
fw = open(fpath, "w")
if content:
text = fw.write(content)
fw.close()
#文件路径
fpath = r"E:\vscode_dir\python_file\write_only.txt"
#写入内容
line = "Hello world!"
#打开文件并写入一行
write_file(fpath, line)
#写入第二行
write_file(fpath, line)
#读取文件内容
read_file(fpath)
#只打开文件,不写入数据
write_file(fpath)
#读取文件内容
read_file(fpath)
2)用读写方式打开
- 用r+打开
fpath = r"E:\vscode_dir\python_file\write_read.txt"
#打开文件
f = open(fpath, "r+")
#读取文件内容
print(f.read())
line = "自律"
#在文件尾部追加
f.write(line)
#重置读取位置
f.seek(0, 0)
#读取写入内容
print(f.read())
f.close()
- 用w+打开
fpath = r"E:\vscode_dir\python_file\write_read.txt"
#打开文件
f = open(fpath, "w+")
line = "人生苦短,我用Python"
#写入数据
text = f.write(line)
#重置读取位置
f.seek(0, 0)
#读取写入内容
print(f.read())
f.close()
3)重复读取
操作:
- 读取文件后,关闭文件后又重新打开
- 使用seek方法,重置读取的位置
示例:
fpath = r"E:\vscode_dir\python_file\test.txt"
#第一次读取
f = open(fpath, encoding="utf-8")
text = f.read()
print(text)
f.close()
#第二次读取
f = open(fpath, encoding="utf-8")
text = f.read()
print(text)
f.close()
使用seek重置文件读取的起始位置:
seekf(cookie, whence=0, /)
主要参数:
cookie:偏移值;
whence:偏移位置,0:文件起始位置,1:文件当前位置,2:文件尾部
注意: 1)当文件不是以二进制方式打开,当whence不为0时,cookie设置为0;偏移值与文件编码格式相关; 2)当文件以二进制方式打开,cookie可以设置其他正确的值;重复读取文件:
fpath = r"E:\vscode_dir\python_file\test.txt"
#打开文件
f = open(fpath, encoding="utf-8")
#设置读取次数
for i in range(3):
#第一次读取
text = f.read()
print(text)
#读取完成后,重置读取位置
f.seek(0, 0)
4,文件编码问题
常见编码格式:UTF-8,GBK,UTF-16
- 注意文件读写时的编码格式要与文件编码格式对应
- 一般看到打开文件,读取时遇到"UnicodeDecodeError"问题,需要检查设置的编码格式
二,文件读写
1,文件读取方式
函数 | 说明 |
f.read(size=-1, /) | 读取文件内容,默认读取完 |
f.readline(size=-1, /) | 读取一行,读取到EOF或者新的一行结束 |
f.readlines(hint=-1, /) | 读取多行 |
for line in f: pass | 使用for循环逐行遍历文件 |
2,文件写入方式
函数 | 说明 |
f.write(text, /) | 写入数据 |
f.writelines(lines, /) | 写入多行 |
三,完整的文件处理简单操作
代码示例如下:
#输入文件路径
in_fpath = r"E:\vscode_dir\python_file\sales_report.txt"
#输出文件路径
out_fpath = r"E:\vscode_dir\python_file\pr001_sales_report.txt"
#文件处理操作
#打开文件
f = open(in_fpath)
#创建新文件,保存过滤数据
fw = open(out_fpath, "w")
for line in f:
if line.startswith(product):
print(line, end="")
fw.write(line)
f.close()
fw.close()