非常に基本的な質問があります。のような名前のファイルがあり、その部分を抽出して、最終的に昇順で並べ替えDipole_E0=1.2625E-01.dat
たいと考えています。1.2625E-01
これはどのように行うことができますか?最初にファイル名を .split() で分割しようとしましたが、期待どおりにはなりません。ご協力いただきありがとうございます。
一番
ローランド
正規表現を調べたい。Python では re モジュールに存在します。正確な形式に応じて、次のようになります。
import re
ematch = re.compile("=([0-9]*\.[0-9]*[eE][+-][0-9]+)")
val = ematch.search(filename).group(0)
リストのソートは、リストの .sort() メソッド、または新しいリストを提供する sorted(list) ビルトインを使用して行うことができます。
最良の方法は、正規表現を使用することです。ファイル名から値を取得するには:
m = re.search(filename, '^Dipole_E0=(.*)/s?')
val = m.group(0)
すべての dilenames を調べて、すべての値を配列に追加します。その並べ替えの後、それだけです。
ファイル名は 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 に変換され、値のリストに追加されます。
これは、ジェネレータ式とビルトインを使用するのに適した状況です: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]