Python文件操作学习笔记

Python 文件操作学习笔记

1. 打开与关闭文件

推荐使用 with open(),代码块结束后会自动关闭文件,即使发生异常也会关闭。

1
2
with open("demo.txt", "r", encoding="utf-8") as f:
content = f.read()
  • demo.txt:文件路径。
  • r:打开模式。
  • encoding:文本编码,读写时应保持一致。

2. 常用打开模式

模式 含义 文件不存在时
r 只读,默认模式 报错
w 写入,清空原内容 创建
a 追加到文件末尾 创建
x 创建新文件并写入,已存在则报错 创建
b 二进制模式,如 rb、wb 取决于主模式
+ 同时允许读写,如 r+ 取决于主模式

注意:w 在打开文件时就会清空内容。 创建文件不会自动创建父文件夹。

3. 读取文件

1
2
with open("demo.txt", "r", encoding="utf-8") as f:
content = f.read() # 读取全部内容,返回字符串

常用方法:

方法 作用
read() 读取全部内容
read(n) 最多读取 n 个字符;二进制模式为字节
readline() 读取一行,通常保留末尾换行符
readlines() 读取所有行,返回列表

逐行读取适合较大的文本文件:

1
2
3
with open("demo.txt", encoding="utf-8") as f:
for line in f:
print(line, end="")

读到末尾时,文本模式返回 "",二进制模式返回 b""。空白行通常是 "\n",与文件末尾不同。

4. 写入与追加

1
2
3
4
5
6
7
8
# 覆盖写入
with open("demo.txt", "w", encoding="utf-8") as f:
f.write("第一行\n")
f.write("第二行\n")

# 追加写入
with open("demo.txt", "a", encoding="utf-8") as f:
f.write("第三行\n")
  • write():写入字符串,不会自动换行。
  • writelines():写入一组字符串,也不会自动添加换行符。
  • 写入数字前,需要用 str() 转为字符串。
1
2
with open("scores.txt", "w", encoding="utf-8") as f:
f.writelines(["小明:90\n", "小红:95\n"])

5. 二进制文件

图片、音频等使用二进制模式,不指定 encoding。

1
2
3
4
5
with open("photo.jpg", "rb") as src:
data = src.read()

with open("copy.jpg", "wb") as dst:
dst.write(data)

二进制读写使用 bytes,文本读写使用 str。

6. 文件指针

文件指针表示下一次读写的位置,读取后会向后移动。

1
2
3
4
5
6
with open("demo.txt", encoding="utf-8") as f:
print(f.read())
print(f.read()) # 已到末尾,返回空字符串

f.seek(0) # 回到开头
print(f.read())
  • tell():返回当前位置;文本模式下不能简单理解为字符数。
  • seek(0):回到文件开头。
  • 文本模式不适合按任意字节位置移动。

7. 路径与文件管理

使用 pathlib.Path 操作路径:

1
2
3
4
5
6
7
8
from pathlib import Path

folder = Path("data")
folder.mkdir(parents=True, exist_ok=True) # 创建文件夹

path = folder / "demo.txt" # 拼接路径
path.write_text("你好", encoding="utf-8")
content = path.read_text(encoding="utf-8")

常用方法:

方法 作用
exists() 判断路径是否存在
is_file() 判断是否为文件
is_dir() 判断是否为文件夹
iterdir() 遍历文件夹中的直接子项
rename(新路径) 重命名或移动
unlink() 删除文件
rmdir() 删除空文件夹

相对路径以当前工作目录为基准,不一定是 Python 脚本所在的目录。

Windows 路径可以写成:

1
2
path = Path(r"D:\study\demo.txt")
# 或 Path("D:/study/demo.txt")

8. 异常处理

1
2
3
4
5
6
7
8
9
10
11
try:
with open("demo.txt", encoding="utf-8") as f:
content = f.read()
except FileNotFoundError:
print("文件不存在")
except PermissionError:
print("没有访问权限")
except UnicodeDecodeError:
print("文件编码与读取编码不一致")
else:
print(content)

注意点:读取用 r,覆盖用 w,追加用 a;文本指定编码,二进制加 b;优先使用 with。


Python文件操作学习笔记
https://umeshu.cn/2021/04/18/Python/Python文件操作学习笔记/
作者
IchiharaYuuko
发布于
2021年4月18日
许可协议