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 に答える