2

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

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

4

3 回答 3

6
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
于 2012-08-14T13:57:07.500 回答
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)
于 2012-08-14T14:00:00.120 回答
0

您必须先将数字转换为 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
于 2012-08-14T17:00:45.923 回答