我在文件中有这样的字符串:
2381 OH 209 SER OG 1049 -0.6546 16 ; qtot 1.543
我想用不同的数字替换一些数字(第一个和第六个,“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
出现在第一个(在其列中)等。所以list_a[2381] = 1
和list_b[1049] = 1
。
但我想我知道该怎么做,我现在的问题实际上是替换字符串中的数字,同时考虑到可变数量的空格。
我应该补充一点,不能保证每行中的数字都是唯一的,所以我不能简单地依赖正则表达式匹配。我必须替换第一个和第六个数字,而不是“每个(或第一个)实例2381
”