有什么方法可以使用Python检索文件名吗?

时间:2018-09-29 19:52:14

标签: python linux python-3.x file ubuntu

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

3 个答案:

答案 0 :(得分:1)

我将使用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)

答案 1 :(得分:0)

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

答案 2 :(得分:0)

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并使用正则表达式进行过滤。