0

たくさんのファイルがあり、すべてのファイル名をに保存しましたfilelists.txt。サンプルファイルは次のとおりです。

cpu_H1_M1_S1.out  
cpu_H1_M1_S2.out  
cpu_H2_M1_S1.out  
cpu_H2_M1_S2.out  

プログラムがファイル名に、を_H検出_Mしたとき。_S後で表示される数値を出力する必要があります。例えば:

_H     _M     _S  
1       1      1  
1       1      2  
2       1      1  
2       1      2  

ありがとうございました。

4

3 に答える 3

2

正規表現を使用できます:

>>> s = 'cpu_H2_M1_S2.out'
>>> re.findall(r'cpu_H(\d+)_M(\d+)_S(\d+)', s)
[('2', '1', '2')]

形式と完全に一致しない場合は、結果として空のリストが表示され、結果を無視するために使用できます。必要に応じて、これを適応させてstrをintに変換することができます。

[int(i) for i in re.findall(...)]
于 2012-11-21T08:10:56.200 に答える
0

を使用してこのようなものregex

In [13]: with open("filelists.txt") as f:
    for line in f:
        data=re.findall(r"_H\d+_M\d+_S\d+",line)
        if data:
            print [x.strip("HMS") for x in data[0].split("_")[1:]]
   ....:             
['1', '1', '1']
['1', '1', '2']
['2', '1', '1']
['2', '1', '2']
于 2012-11-21T08:09:58.057 に答える
0

私は正規表現自体に反対することは何もありませんが、この問題にはやり過ぎだと思います。これがより軽い解決策です:

five = operator.itemgetter(5)
seven = operator.itemgetter(7)
nine = operator.itemgetter(9)
with open("filelists.txt") as f:
    for line in f:
        return [(int(five(line)), int(seven(line)), int(nine(nine))) for line in f]

お役に立てば幸い

于 2012-11-21T08:21:38.290 に答える