Python语法基础-文件/文件夹处理

文件处理

所有方法

方法 描述
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
2
3
4
5
6
def generate_tsv(img_folder):
tsv_path = os.path.join(img_folder, "Word.tsv")

# 删除文件,如果存在的话
if os.path.exists(tsv_path):
os.remove(tsv_path)

遍历文件夹下文件

1
2
3
4
5
6
7
8
import os

# 遍历文件夹中的文件
for file_name in os.listdir(img_folder):
file_path = os.path.join(img_folder, file_name)

if os.path.isfile(file_path):
if file_name.endswith(".png") or file_name.endswith(".jpg"):

文件写入

1
2
with open(tsv_path, 'a') as tsv_file:
tsv_file.write(f"{file_path}\t{str_part}\n")

获取目录

工作目录

os.getcwd() 获取的是当前工作目录(Current Working Directory,CWD)。

假设你有一个脚本 my_script.py 放在 /home/user/scripts 目录下.

你可以在不同的目录中运行这个脚本,比如从 /home/user 目录或者 /home/user/projects 目录运行:

1
2
3
4
5
6
7
# 从 /home/user 目录运行脚本
cd /home/user
python scripts/my_script.py

# 从 /home/user/projects 目录运行脚本
cd /home/user/projects
python ../scripts/my_script.py

在这两种情况下,my_script.py 中的 os.getcwd() 将返回不同的路径:

  • 在第一种情况下,os.getcwd() 将返回 /home/user
  • 在第二种情况下,os.getcwd() 将返回 /home/user/projects

当前脚本所在目录

1
2
3
4
5
6
7
8
9
import os

# 获取当前脚本的绝对路径
script_path = os.path.abspath(__file__)

# 获取当前脚本所在的目录
script_directory = os.path.dirname(script_path)

print("脚本所在目录:", script_directory)

上级目录

要获取当前脚本所在目录的上级目录,可以在获取当前脚本目录后,再使用路径操作函数来获取上级目录。以下是几种常见的方法:

方法 1: 使用 os 模块

1
2
3
4
5
6
7
8
9
10
11
12
import os

# 获取当前脚本的绝对路径
script_path = os.path.abspath(__file__)

# 获取当前脚本所在的目录
script_directory = os.path.dirname(script_path)

# 获取上级目录
parent_directory = os.path.dirname(script_directory)

print("脚本所在目录的上级目录:", parent_directory)

方法 2: 使用 pathlib 模块

1
2
3
4
5
6
7
8
9
10
11
12
from pathlib import Path

# 获取当前脚本的路径
script_path = Path(__file__).resolve()

# 获取当前脚本所在的目录
script_directory = script_path.parent

# 获取上级目录
parent_directory = script_directory.parent

print("脚本所在目录的上级目录:", parent_directory)

注意script_path.parentpathlib.Path 对象,而不是普通的字符串。

如果你想将 Path 对象与其他字符串拼接,需要先将 Path 对象转换为字符串。

你可以使用 str() 函数来进行转换。

1
2
script_path = Path(__file__).resolve()
project_path = str(script_path.parent.parent)

路径拼接

路径拼接不要自己用斜杠拼接,在不同的系统上会有兼容性问题。

os.path

1
2
3
script_path = Path(__file__).resolve()
project_path = str(script_path.parent.parent)
model_filepath = os.path.join(project_path, "ml-resource","knn_model.xml")

pathlib

pathlib 提供了更简洁的方式来拼接多个路径段,使用 / 运算符:

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

# 拼接多个路径
base_dir = Path('/path/to/directory')
sub_dir = 'subdirectory'
file_name = 'file.txt'

full_path = base_dir / sub_dir / file_name
print(full_path)

这里的full_path是对象

1
full_path_str = str(full_path)