文件处理
所有方法
| 方法 | 描述 |
|---|---|
| close() | 关闭文件。 |
| detach() | 从缓冲区返回分离的原始流(raw stream)。 |
| fileno() | 从操作系统的角度返回表示流的数字。 |
| flush() | 刷新内部缓冲区。 |
| isatty() | 返回文件流是否是交互式的。 |
| read() | 返回文件内容。 |
| readable() | 返回是否能够读取文件流。 |
| readline() | 返回文件中的一行。 |
| readlines() | 返回文件中的行列表。 |
| seek() | 更改文件位置。 |
| seekable() | 返回文件是否允许我们更改文件位置。 |
| tell() | 返回当前的文件位置。 |
| truncate() | 把文件调整为指定的大小。 |
| writeable() | 返回是否能够写入文件。 |
| write() | 把指定的字符串写入文件。 |
| writelines() | 把字符串列表写入文件。 |
打开文件
在 Python 中使用文件的关键函数是 open() 函数。
open() 函数有两个参数:文件名和模式。
有四种打开文件的不同方法(模式):
- “r” - 读取 - 默认值。打开文件进行读取,如果文件不存在则报错。
- “a” - 追加 - 打开供追加的文件,如果不存在则创建该文件。
- “w” - 写入 - 打开文件进行写入,如果文件不存在则创建该文件。
- “x” - 创建 - 创建指定的文件,如果文件存在则返回错误。
此外,您可以指定文件是应该作为二进制还是文本模式进行处理。
- “t” - 文本 - 默认值。文本模式。
- “b” - 二进制 - 二进制模式(例如图像)。
示例
此外,您可以指定文件是应该作为二进制还是文本模式进行处理:
1 | f = open("demofile.txt") |
以上代码等同于:
1 | f = open("demofile.txt", "rt") |
因为 “r” (读取)和 “t” (文本)是默认值,所以不需要指定它们。
文件删除
1 | def generate_tsv(img_folder): |
遍历文件夹下文件
1 | import os |
文件写入
1 | with open(tsv_path, 'a') as tsv_file: |
获取目录
工作目录
os.getcwd() 获取的是当前工作目录(Current Working Directory,CWD)。
假设你有一个脚本 my_script.py 放在 /home/user/scripts 目录下.
你可以在不同的目录中运行这个脚本,比如从 /home/user 目录或者 /home/user/projects 目录运行:
1 | # 从 /home/user 目录运行脚本 |
在这两种情况下,my_script.py 中的 os.getcwd() 将返回不同的路径:
- 在第一种情况下,
os.getcwd()将返回/home/user。 - 在第二种情况下,
os.getcwd()将返回/home/user/projects。
当前脚本所在目录
1 | import os |
上级目录
要获取当前脚本所在目录的上级目录,可以在获取当前脚本目录后,再使用路径操作函数来获取上级目录。以下是几种常见的方法:
方法 1: 使用 os 模块
1 | import os |
方法 2: 使用 pathlib 模块
1 | from pathlib import Path |
注意script_path.parent是pathlib.Path 对象,而不是普通的字符串。
如果你想将 Path 对象与其他字符串拼接,需要先将 Path 对象转换为字符串。
你可以使用 str() 函数来进行转换。
1 | script_path = Path(__file__).resolve() |
路径拼接
路径拼接不要自己用斜杠拼接,在不同的系统上会有兼容性问题。
os.path
1 | script_path = Path(__file__).resolve() |
pathlib
pathlib 提供了更简洁的方式来拼接多个路径段,使用 / 运算符:
1 | from pathlib import Path |
这里的full_path是对象
1 | full_path_str = str(full_path) |
文件夹创建
1 | # 定义要创建的嵌套文件夹路径 |