2

私はPythonを使用していますが、さまざまなファイルタイプのファイル名のリストがあります。テキストファイルは次のようになります。

01.txt
02.txt
03.txt
...

テキストファイルがすべてこの方法で番号付けされていると仮定しましょう。ここで、1から25の範囲の番号を持つすべてのテキストファイルを取得したいと思います。そこで%02i.txt、一致するすべてのファイル名を識別するために、GUIを介したようなフォーマット文字列を提供したいと思います。

これまでの私の解決策は、ネストされたforループです。外側のループはリスト全体を反復処理し、内側のループはファイルごとに1から25までカウントします。

fmt = '%02i.txt'
for f in files:
    for i in range(1, 25+1):
        if f == fmt % i:
            # do stuff

このネストされたループはあまりきれいに見えず、複雑さはO(n²)です。そのため、非常に長いリストでは時間がかかる場合があります。これを行うためのよりスマートな/pythonicな方法はありますか?

はい、のような正規表現を使用することもできますが、を使用し^\d{2}\.txt$たフォーマット文字列の%方が入力がはるかに簡単です。

4

2 に答える 2

2

セットを使用できます:

fmt = '%02i.txt'
targets = {fmt % i for i in range(1, 25+1)}

それから

for f in files:
    if f in targets:
        # do stuff
于 2013-03-17T02:13:02.423 に答える
0

ファイルを反復処理するためのよりPython的な方法は、globモジュールを使用することです。

>>> import glob
>>> for f in glob.iglob('[0-9][0-9].txt'):
        print f


01.txt
02.txt
03.txt
于 2013-03-17T02:54:59.813 に答える