【问题标题】:Find file with largest number in filename in each sub-directory with python?用python在每个子目录中查找文件名中文件名最大的文件?
【发布时间】:2018-06-20 14:48:39
【问题描述】:

我正在尝试在每个子目录中查找文件名中编号最大的文件。这样我就可以完成打开每个子目录中的最新文件。每个文件都将遵循日期文件名.xlsx 的命名规则。

例如。 20180620 文件名.xlsx

我有一个代码可以在一个目录中搜索最大的数字。

dirname = py.path.local(path)

list_of_files = []

for file in dirname.visit(fil='*.xlsx', bf=True):
    list_of_files.append(file)

largest = max(list_of_files)
print (largest)

我对 Python 还是很陌生,我不太清楚如何使这种代码风格在目录中的每个子目录中查找具有最大编号的文件。我已经尝试了以下代码的许多变体,但我无法让它只打印每个子目录中编号最大的文件。

list_of_files = []

for root, dirs, files in os.walk(path):
    for name in files:
        if name.endswith((".xlsx")):
            list_of_files.append(files)
            largest = max(list_of_files)
            print (largest)

任何帮助将不胜感激!

【问题讨论】:

  • 你能澄清你的问题吗?你是什​​么意思“最大的数字”?你是说文件的内容吗? excel工作簿中的数字?您是指文件名本身吗?
  • 没问题。我很想按日期打开最新的文件。日期将在每个子目录的文件名中使用相同的格式。日期文件名.xlsx。前任。 20180620 文件名.xlsx

标签: python arrays sorting max


【解决方案1】:

你的第二个代码块几乎做了你想做的事,你只是错误地嵌套了你的操作。

for root, dirs, files in os.walk(path):
    # new subdir, so let's make a new...
    list_of_files = []
    for name in files:
        if name.endswith((".xlsx")):
            list_of_files.append(name)  # you originally appended the list of all names!
    # once we're here, list_of_files has all the filenames in it,
    # so we can find the largest and print it
    largest = max(list_of_files)
    print (largest)

如果我可以建议一个更短的解决方案:

[(root, max(fname for fname in files if fname.endswith(".xlsx"))) for
 root, dirs, files in os.walk(path)]

这将为您提供(dirname, largest_filename) 对的列表,而不仅仅是将它们打印到屏幕上。

【讨论】:

  • 谢谢!这似乎比我以前更接近了。当我使用上面写的代码时,它显示“ValueError:max() arg 是一个空序列”。现在,我正在使用路径指向的父目录中的三个子目录进行测试。我预计它将从打印语句中返回 3 个文件,然后;每个子目录中编号最大的文件名。底部代码产生了相同的 ValueEerror 消息。
  • @Philalethes 那么您似乎将代码指向了错误的路径。尝试从那里打印每个文件作为调试方法? (在for name in files 内但在if name.endswith(".xlsx") 之前写:print("{}/{}".format(root, name))
  • 再次感谢您的跟进。我也尝试在几个地方打印列表,我可以看到文件。如果我运行到您的调试行,我可以看到所有子目录中所有文件的列表。一旦我尝试将代码运行到最大的 - max() 行并打印(最大)行,它就会给我“ValueError:max() arg is an empty sequence”。如果我将最大的变量和打印(最大)行一直嵌套到左侧,它将打印最终目录的最大文件名。我把这两行代码放在其他任何地方,它都会给我ValueError。
  • @Philalethes 您的问题现在似乎与代码无关(或者这是一个不明显的错字),所以我不确定我还能如何帮助您。您收到的错误消息是自我描述的,因此您必须了解为什么在调用maxlist_of_files 似乎为空。祝你好运!
  • 我启动了 pycharm(我不太擅长),并试图观察当我通过函数时发生的事情。对我来说奇怪的是代码直接跳过了 if file.endswith("xlsx")。我最初在父目录中没有文件,只有三个子目录。一旦我将文件也放入父目录中,代码就开始工作了!它吐出父目录中的一个文件作为最大文件(它是唯一的文件),然后逐步遍历其他子目录。任何想法为什么在父目录中有一个文件很重要?
猜你喜欢
  • 2017-08-21
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-10-14
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多