【问题标题】:How to read filenames in a folder and access them in an alphabetical and increasing number order?如何读取文件夹中的文件名并按字母顺序和递增数字顺序访问它们?
【发布时间】:2012-08-10 20:01:50
【问题描述】:

我想问一下如何以正确的顺序(按字母顺序和数字递增)有效地处理对文件夹中文件名的访问。

例如,我在一个文件夹中有以下文件:apple1.dat、apple2.dat、apple10.dat、banana1.dat、banana2.dat、banana10.dat。我想读取文件的内容,以便首先读取apple1.dat,最后读取banana10.dat。

谢谢。

这是我到目前为止所做的。

from glob import glob
files=glob('*.dat')
for list in files
# I read the files here in order

但正如所指出的,apple10.dat 位于 apple2.dat 之前

【问题讨论】:

  • 如果您让我们知道您已经尝试过什么会有所帮助,这样我们就可以避免在答案中讨论这个问题。你在做你做的事情时遇到了什么问题等等。
  • 请记住,自然顺序文件通常使用字母 ASCII 值排序,这将放置例如apple10.datapple1.dat 之后但之前 apple2.dat
  • 您复制了我的答案,但您忘记使用 sorted() 函数对文件列表进行排序

标签: python list filenames glob


【解决方案1】:

您必须先将数字转换为 int。这样做需要将名称分解为字符串和数字,将数字转换为 int 并排序。也许其他人有更短或更有效的方法。

    def split_in_two(str_in):
        ## go from right to left until a letter is found   
        ## assume first letter of name is not a digit
        for ctr in range(len(str_in)-1, 0, -1):
            if not str_in[ctr].isdigit():
                return str_in[:ctr+1], str_in[ctr+1:]  ## ctr+1 = first digit
        ## default for no letters found
        return str_in, "0"

    files=['apple1.dat', 'apple2.dat', 'apple10.dat', 'apple11.dat', 
           'banana1.dat', 'banana10.dat', 'banana2.dat']
    print sorted(files)   ## sorted as you say

    sort_numbers = []
    for f in files:
        ## split off '.dat.
        no_ending = f[:-4]
        str_1, str_2 = split_in_two(no_ending)
        sort_numbers.append([str_1, int(str_2), ".dat"])
    sort_numbers.sort()
    print sort_numbers

【讨论】:

    【解决方案2】:

    试试这个。

    import os
    
    def get_sorted_files(Directory)
        filenamelist = []
        for root, dirs, files in os.walk(Directory):
            for name in files:
                fullname = os.path.join(root, name)
                filenamelist.append(fullname)
        return sorted(filenamelist)
    

    【讨论】:

      【解决方案3】:
      from glob import glob
      import os
      
      files_list = glob(os.path.join(my_folder, '*.dat'))
      for a_file in sorted(files_list):
        # do whatever with the file
        # 'open' or 'with' statements depending on your python version
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2020-01-16
        • 1970-01-01
        • 2011-08-19
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2023-03-26
        相关资源
        最近更新 更多