在文件名中具有最大编号的目录中查找文件

时间:2017-03-28 16:12:48

标签: python blob filenames

我的问题与Python identify file with largest number as part of filename

密切相关

我想将文件追加到某个目录。文件名是:file1,file2 ...... file ^ n。如果我一次性完成这项工作,但是当我想再次添加文件,并且想要找到添加的最后一个文件(在这种情况下是具有最高编号的文件)时,它会识别' file6'要高于' file100'。

我该如何解决这个问题。

import glob
import os

latest_file = max(sorted(list_of_files, key=os.path.getctime))
print latest_file

正如你所看到的,我试着看看创造的时间,我也试着看看修改时间,但这些可以是相同的,所以没有帮助。

编辑我的文件名有扩展" .txt"在数字之后

2 个答案:

答案 0 :(得分:4)

我将尝试仅使用文件名而不是日期来解决它。

您必须在应用标准之前转换为整数,或者将alphanum排序应用于整个文件名

概念证明:

import re
list_of_files = ["file1","file100","file4","file7"]

def extract_number(f):
    s = re.findall("\d+$",f)
    return (int(s[0]) if s else -1,f)

print(max(list_of_files,key=extract_number))

结果:file100

  • key函数提取在文件末尾找到的数字并转换为整数,如果没有找到,则返回-1
  • 您无需sort即可找到最大值,只需将密钥直接传递给max
  • 如果2个文件具有相同的索引,请使用完整文件名来打破平局(这解释了tuple密钥)

答案 1 :(得分:1)

使用以下正则表达式,您可以获取每个文件的编号:

import re

for file in list_of_files:
    num = int(re.search('file(\d*)', file).group(1))  # assuming filename is "filexxx.txt"
    # compare num to previous max, e.g.
    max = num if num > max else max  # set max = 0 before for-loop

在循环结束时,max将是您的最高文件名。