【问题标题】:How to get the filename in directory with the max number in the filename python?如何在文件名python中获取最大数量的目录中的文件名?
【发布时间】:2020-12-25 03:47:21
【问题描述】:

我在文件夹中有一些 xml 文件,例如 'assests/2020/2010.xml''assests/2020/20005.xml''assests/2020/20999.xml' 等。我想在“2020”文件夹中获取具有最大值的文件名。以上三个文件的输出应该是20999.xml

我正在尝试如下:


import glob
import os

list_of_files = glob.glob('assets/2020/*')
# latest_file = max(list_of_files, key=os.path.getctime)
# print (latest_file)

我无法找到获取所需文件的逻辑。 Here 是对我的查询有最佳答案但我无法构建逻辑的资源。

【问题讨论】:

  • 你可以找到你的答案here
  • 您是字典顺序最高的文件名,还是具有最新创建时间的文件名(如您的代码所示),还是在.xml 之前具有最大整数的文件名?换句话说,你认为哪个更高,20888 还是 2090?

标签: python glob python-re


【解决方案1】:

您可以使用 pathlib 对 xml 文件进行 glob 并访问 Path 对象属性,例如 .name 和 .stem:

from pathlib import Path

list_of_files = Path('assets/2020/').glob('*.xml')
print(max((Path(fn).name for fn in list_of_files), key=lambda fn: int(Path(fn).stem)))

输出:

20999.xml

【讨论】:

    【解决方案2】:

    我现在无法测试,但你可以试试这个:

    files = []
    for filename in list_of_files:
        filename = str(filename)
        filename = filename.replace('.xml','') #Assuming it's not printing your complete directory path
        filename = int(filename)
        files += [filename]
    
    print(files)
    

    这应该会为您提供整数格式的文件名,现在您应该能够按降序对它们进行排序并获得排序列表的第一项。

    【讨论】:

      【解决方案3】:

      使用 re 在文件路径中搜索适当的结尾。如果找到,请再次使用 re 提取 nr。

      import re
      
      list_of_files = [
          'assests/2020/2010.xml',
          'assests/2020/20005.xml',
          'assests/2020/20999.xml'
          ]
      
      highest_nr = -1
      highest_nr_file = ''
      for f in list_of_files:
          re_result = re.findall(r'\d+\.xml$', f)
          if re_result:
              nr = int(re.findall(r'\d+', re_result[0])[0])
              if nr > highest_nr:
                  highest_nr = nr
                  highest_nr_file = f
      
      print(highest_nr_file)
      

      结果

      assests/2020/20999.xml 
      

      【讨论】:

        【解决方案4】:

        你也可以试试这个方法。

        import os, re
        
        path = "assests/2020/"
        
        files =[
        "assests/2020/2010.xml",
        "assests/2020/20005.xml",
        "assests/2020/20999.xml"
        ]
        
        n = [int(re.findall(r'\d+\.xml$',file)[0].split('.')[0]) for file in files]
        
        
        output = str(max(n))+".xml"
        print("Biggest max file name of .xml file is ",os.path.join(path,output))
        

        输出:

        Biggest max file name of .xml file is  assests/2020/20999.xml
        

        【讨论】:

          【解决方案5】:
          import glob
          
          xmlFiles = [] 
          # this will store all the xml files in your directory
          for file in glob.glob("*.xml"):
              xmlFiles.append(file[:4])
          
          # this will print the maximum one
          print(max(xmlFiles))
          

          【讨论】:

            猜你喜欢
            • 1970-01-01
            • 2013-04-01
            • 2015-03-22
            • 1970-01-01
            • 1970-01-01
            • 2015-09-22
            • 1970-01-01
            • 1970-01-01
            • 2011-03-18
            相关资源
            最近更新 更多