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

2024-06-16 11:53:13 发布

您现在位置:Python中文网/ 问答频道 /正文

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


Tags: 文件代码目录目标列表文件名linux数字
3条回答

Glob会很好的。它是一种正则表达式,但专门用于文件搜索,而且更简单。基本上你只需要使用*作为通配符,你也可以选择数字。只需谷歌一下它到底是什么。例如,它可能非常强大,并且是bashshell所固有的。你知道吗

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。这是一个以面向对象的方式处理文件系统的库。有些人喜欢,有些人不喜欢

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

我将使用^{}获取所有文件名,删除“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(包)获取数字。如果不想查看regex,可以使用replace()从字符串中删除字母,然后使用int()转换该字符串。你知道吗

相关问题 更多 >