在文件名中编号最大的目录中查找文件
Find file in directory with the highest number in the filename
我的问题与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”
我将尝试仅使用文件名而不是日期来解决它。
您必须先转换为整数,然后才能将条件或字母数字排序应用于整个文件名
概念验证:
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
- 关键函数提取文件末尾找到的数字并转换为整数,如果没有找到returns
-1
- 不需要
sort
求最大值,直接把key传给max
就可以了
- 如果 2 个文件有相同的索引,使用完整的文件名来打破平局(这解释了
tuple
键)
使用下面的正则表达式可以得到每个文件的编号:
import re
maxn = 0
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.
maxn = num if num > maxn else maxn
在循环结束时,maxn
将是您的最大文件名编号。
我的问题与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”我将尝试仅使用文件名而不是日期来解决它。
您必须先转换为整数,然后才能将条件或字母数字排序应用于整个文件名
概念验证:
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
- 关键函数提取文件末尾找到的数字并转换为整数,如果没有找到returns
-1
- 不需要
sort
求最大值,直接把key传给max
就可以了 - 如果 2 个文件有相同的索引,使用完整的文件名来打破平局(这解释了
tuple
键)
使用下面的正则表达式可以得到每个文件的编号:
import re
maxn = 0
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.
maxn = num if num > maxn else maxn
在循环结束时,maxn
将是您的最大文件名编号。