我有一些示例数据,如下所示:
ATOM 973 CG ARG A 61 -21.593 8.884 69.770 1.00 25.13 C
ATOM 974 CD ARG A 61 -21.610 7.433 69.314 1.00 23.44 C
ATOM 975 NE ARG A 61 -21.047 7.452 67.937 1.00 12.13 N
我想通过添加偏移值来替换第 6 列,并且只替换第 6 列,在上面的情况下它是 308。
所以61+308 = 369,所以第6列的61应该换成369
我不能str.split()
行,因为行距非常重要。
我尝试过使用str.replace()
,但第 2 列中的值也可以与第 6 列重叠
我确实尝试反转该行并使用str.repalce()
,但第 7、8、9、10 和 11 列中的值可能与str
要替换的值重叠。
到目前为止,我所拥有的丑陋代码是(除了第 7、8、9、10 和/或 11 列中的值重叠之外,它部分有效):
with open('2kqx.pdb', 'r') as inf, open('2kqx_renumbered.pdb', 'w') as outf:
for line in inf:
if line.startswith('ATOM'):
segs = line.split()
if segs[4] == 'A':
offset = 308
number = segs[5][::-1]
replacement = str((int(segs[5])+offset))[::-1]
print number[::-1],replacement
line_rev = line[::-1]
replaced_line = line_rev.replace(number,replacement,1)
print line
print replaced_line[::-1]
outf.write(replaced_line[::-1])
上面的代码在下面产生了这个输出。正如您在第二行中看到的那样,第 6 列没有更改,但在第 7 列中发生了更改。我认为通过反转字符串我可以绕过与第 2 列的潜在重叠,但我忘记了其他列,我真的不知道如何解决它。
ATOM 973 CG ARG A 369 -21.593 8.884 69.770 1.00 25.13 C
ATOM 974 CD ARG A 61 -21.3690 7.433 69.314 1.00 23.44 C
ATOM 975 NE ARG A 369 -21.047 7.452 67.937 1.00 12.13 N