如何读取文件夹中的文件名并按字母顺序和递增的数字顺序访问它们?

2024-09-28 16:20:58 发布

您现在位置:Python中文网/ 问答频道 /正文

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

例如,我在一个文件夹中有以下文件: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


Tags: 文件in文件夹顺序文件名字母数字files
3条回答

你必须先把数字转换成整数。做这件事需要把名字分成字符串和数字,把数字转换成整数并进行排序。也许其他人有一个更短或更有效的方法。

    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

试试这个。

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)
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

相关问题 更多 >