私はファイルにこのような文字列を持っています:
2381 OH 209 SER OG 1049 -0.6546 16 ; qtot 1.543
いくつかの数字(1番目と6番目、「2381」と「1049」)を別の数字に置き換えたいのですが、位置合わせを維持します。つまり、必要に応じて数字の前に空白を追加または削除します。つまり、2381
(__24
は_
空白)または_1049
に置き換え37628
ます。
各番号の正確な位置をハードコーディングすることはできますが、ファイルによって異なる可能性があるため、もっと用途の広いものが必要です。
誰かがPythonでこれを行うのを手伝ってもらえますか?コードが次のようなものだとします。
# list_a and list_b contain two different mappings between integer numbers
for line in file:
(a, b) = (int(line.split()[0]), int(line.split()[5]))
c = list_a[a]
d = list_b[b]
# create "modline", as "line" where (a,b) are replaced with (c,d)
print modline
重要な場合は、マッピングlist_a
とlist_b
は数字の出現順序a
ですb
。したがって、入力ファイルに次のものがある場合:
2381 OH 209 SER OG 1049 -0.6546 16 ; qtot 1.543
2382 HO 209 SER HG 1049 0.4275 1.008 ; qtot 1.971
2379 C 209 SER C 1048 0.5973 12.01 ; qtot 2.568
2380 O 209 SER O 1048 -0.5679 16 ; qtot 2
私はそれを次のようにしたいと思います:
1 OH 209 SER OG 1 -0.6546 16 ; qtot 1.543
2 HO 209 SER HG 1 0.4275 1.008 ; qtot 1.971
3 C 209 SER C 2 0.5973 12.01 ; qtot 2.568
4 O 209 SER O 2 -0.5679 16 ; qtot 2
2381
1番目に表示されるため、 2380
4番目に表示されます。1049
(その列に)1番目に表示されlist_a[2381] = 1
ますlist_b[1049] = 1
。
しかし、私はそれを行う方法を知っていると思います。私の問題は、スペースの可変数を考慮して、文字列内の数字を実際に置き換えることです。
番号が各行で一意であるという保証はないので、正規表現の一致に単純に依存することはできません。「すべての(または最初の)インスタンス」ではなく、1番目と6番目の番号を置き換える必要があり2381
ます