0

非常に基本的な質問があります。のような名前のファイルがあり、その部分を抽出して、最終的に昇順で並べ替えDipole_E0=1.2625E-01.datたいと考えています。1.2625E-01これはどのように行うことができますか?最初にファイル名を .split() で分割しようとしましたが、期待どおりにはなりません。ご協力いただきありがとうございます。

一番

ローランド

4

4 に答える 4

1

正規表現を調べたい。Python では re モジュールに存在します。正確な形式に応じて、次のようになります。

import re
ematch = re.compile("=([0-9]*\.[0-9]*[eE][+-][0-9]+)")
val = ematch.search(filename).group(0)

リストのソートは、リストの .sort() メソッド、または新しいリストを提供する sorted(list) ビルトインを使用して行うことができます。

于 2012-05-22T09:12:49.243 に答える
1

最良の方法は、正規表現を使用することです。ファイル名から値を取得するには:

m = re.search(filename, '^Dipole_E0=(.*)/s?')
val = m.group(0)

すべての dilenames を調べて、すべての値を配列に追加します。その並べ替えの後、それだけです。

于 2012-05-22T09:11:07.590 に答える
0

ファイル名は glob モジュールで取得できます。

    from glob import glob
    file_names = glob("yourpath/*.dat")

    vals = []
    for name in file_names:
         vals.append(float(name[:-4].rpartition("=")[2]))

    vals.sort()            

name[:-4] は「.dat」を破棄します。rpartition は文字列メソッドです。エントリ 0 が分割に使用される文字列の左側の文字列、エントリ 1 が分割に使用される文字列 (ここでは "=")、エントリ 2 がこの文字列の右側の文字列 (ここでは float) であるタプルを返します。次に、float に変換され、値のリストに追加されます。

于 2012-05-22T09:08:43.550 に答える
0

これは、ジェネレータ式ビルトインを使用するのに適した状況です:sorted

sorted(float(filename.split("=", 1)[1].rsplit(".", 1)[0]) for filename in filenames)

filenamesファイル名のリストはどこにありますか。

>>> filenames = ["Dipole_E0=1.2625E-01.dat", "Dipole_E0=1.3625E-01.dat", "Dipole_E0=0.2625E-01.dat"]
>>> sorted(float(filename.split("=", 1)[1].rsplit(".", 1)[0]) for filename in filenames)
[0.02625, 0.12625, 0.13625]
于 2012-05-22T09:13:59.653 に答える