numpy 配列に大きなテキスト データを読み込もうとしています。Numpy の loadtxt と genfromtxt は as では機能しませんでした。
- まず、区切り記号で始まるコメント行を削除する必要があります
['#','!','C']
- 2 番目に、は整数の繰り返し回数で、は float データ
n*value
であるという形式のデータに繰り返しパターンがあります。n
value
したがって、 を使用してテキスト ファイルを読み取ろうとしreadlines()
、Numpyを使用loadtxt
してデータを Numpy 配列に変換します。
読み取りと置換のために、正規表現 (re
モジュール) を使用しようとしましたが、機能しませんでした。ただし、次の Python コードは機能しています。私の質問は、これを行う最も効率的で Pythonic な方法は何ですか?
readlines()
正規表現の場合、次のリスト オブジェクトの検索と置換の正しい正規表現コードは何ですか:
lines = ['1 2 3*2.5 3 6 1*.3 8 \n', '! comment here\n', '1*1 2.0 2*2.1 3 6 0 8 \n']
for l, line in enumerate(lines):
if line.strip() == '' or line.strip()[0] in ['#','!','C']:
del lines[l]
for l, line in enumerate(lines):
repls = [word for word in line.strip().split() if word.find('*')>=0]
print repls
for repl in repls:
print repl
line = line.replace(repl, ' '.join([repl.split('*')[1] for n in xrange(int(repl.split('*')[0]))]))
lines[l] = line
print lines
出力は次のとおりです。
['1 2 2.5 2.5 2.5 3 6 .3 8 \n', '1 2.0 2.1 2.1 3 6 0 8 \n']
編集:
コメントに応じて、Python コードを次のように編集しました。
in_lines = ['1 2 3*2.5 3 6 1*.3 8 \n', '! comment here\n', '1*1 2.0 2*2.1 3 6 0 8 \n']
lines = []
for line in in_lines:
if line.strip() == '' or line.strip()[0] in ['#','!','C']:
continue
else:
repls = [word for word in line.strip().split() if word.find('*')>=0]
for repl in repls:
line = line.replace(repl, ' '.join([float(repl.split('*')[1]) for n in xrange(int(repl.split('*')[0]))]))
lines.append(line)
print lines