有没有办法使用 Python 检索文件名?



在Linux目录中,我有几个编号文件,例如"day1"和"day2"。我的目标是编写一个代码,从文件中检索数字,并将 1 添加到具有最大数字的文件并创建一个新文件。因此,例如,如果有文件"day1"、"day2"和"day3",代码应读取文件列表并添加"day4"。为此,至少我需要知道如何检索文件名上的数字。

我会使用os.listdir来获取所有文件名,删除"day"前缀,将剩余字符转换为整数,并取最大值。 从那里开始,只需增加数字并将其附加到相同的前缀:

import os
max_file = max([int(f[3:]) for f in os.listdir('some_directory')])
new_file = 'day' + str(max_file + 1)

获取带有os模块/包的所有文件(手边没有确切的命令(,然后使用regex(包(获取数字。如果您不想研究正则表达式,您可以使用replace()从字符串中删除字母并使用int()转换该字符串。

Glob 对此有好处。它有点正则表达式,但专门用于文件搜索并且更简单。基本上你只使用*作为通配符,你也可以选择数字。只需谷歌它到底是什么。它可以非常强大,例如原生于 bash shell。

for glob import glob
from pathlib import Path
pattern = "day"
last_file_number = max(map(lambda f: int(f[len(pattern):]), glob(pattern + "[0-9]*")))
Path("%s%d" % (pattern, last_file_number + 1)).touch()

你也可以看到我在这里使用pathlib。这是一个以 OOP 方式处理文件系统的库。有些人喜欢,有些人不喜欢。

所以,一点免责声明:Glob 不如正则表达式强大。例如,这里的daydream不会被匹配,但day0dream仍然会被匹配。您也可以尝试day*[0-9],但daydream0仍然会匹配。 当然,如果您知道自己保持在两位数以下,您也可以使用day[0-9]。因此,如果您的用例需要这样做,您可以使用 glob 并使用正则表达式进行过滤。

最新更新