How to read filenames in a folder and access them in an alphabetical and increasing number order?

馋奶兔 提交于 2021-02-16 14:49:09

问题


I would like to ask how to efficiently handle accessing of filenames in a folder in the right order (alphabetical and increasing in number).

For example, I have the following files in a folder: apple1.dat, apple2.dat, apple10.dat, banana1.dat, banana2.dat, banana10.dat. I would like to read the contents of the files such that apple1.dat will be read first and banana10.dat will be read last.

Thanks.

This is what I did so far.

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

But as pointed out, apple10.dat comes before apple2.dat


回答1:


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



回答2:


try this one.

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:


You have to cast the numbers to an int first. Doing it the long way would require breaking the names into the strings and numbers, casting the numbers to an int and sorting. Perhaps someone else has a shorter or more efficient way.

    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


来源:https://stackoverflow.com/questions/11953824/how-to-read-filenames-in-a-folder-and-access-them-in-an-alphabetical-and-increas

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!