1

次の問題があります。

複数のデータ ファイルをロードする必要があります。ファイルは、私のデバイスによって次のように命名されます。

meas98.dat
meas99.dat
meas100.dat
meas101.dat

つまり、先行ゼロはありません。したがって、ファイル名を取得した場合

os.listdir

これらはアルファベット順に並べられているため、「meas100.dat」が最初になります。これは明らかに私が達成したいことではありません。問題は、これを行う最もエレガントな方法は何ですか?

私が思いついた(エレガントではない)方法は次のとおりです。

  • ファイル名をロードする
  • ファイル番号を抽出する
  • ファイル番号を並べ替える (インデックスを取得する)
  • これらのインデックスでファイル名を並べ替える

Pythonには、ファイルのロード中にこれを実行できる何かが組み込まれていると確信しています...

4

3 に答える 3

7
l = ['meas98.dat',
    'meas99.dat',
    'meas100.dat',
    'meas101.dat']
l.sort(key=lambda i: int(i.strip('meas.dat')))

pathlibモジュールを使用してこれを行う Pythonic な方法があります。

これは私のターミナルのファイルです:

~/so$ ls
meas100.dat  meas98.dat  meas99.dat

これはpythonのファイルです:

from pathlib import Path
p = Path('/home/li/so/')
list(p.iterdir())
[PosixPath('/home/li/so/meas99.dat'),
 PosixPath('/home/li/so/meas98.dat'),
 PosixPath('/home/li/so/meas100.dat')]

がこのような処理を行っpathlibているようです。試してみてください。

于 2017-01-02T10:48:30.563 に答える
3

slicing [4:-4]ファイル名から数字のみを取得するために使用sorted()し、それらを使用してファイル名をソートします。

# random order
l = [
    'meas98.dat',
    'meas100.dat',
    'meas99.dat',
    'meas101.dat',
    'meas1.dat',
]

sorted(l, key=lambda x: int(x[4:-4]))

print(l)

結果

['meas1.dat', 'meas98.dat', 'meas99.dat', 'meas100.dat', 'meas101.dat']
于 2017-01-02T10:47:40.297 に答える