【发布时间】:2025-11-29 21:55:02
【问题描述】:
我正在尝试将a[i] 列表中的新更改替换为原始er.pdb 文件
使用文件中的数字和列表中的项目。
这是列表中项目外观的示例。
['ATOM 168 N MET A 48 6.674 9.818 33.156 1.00 45.09 N ',
'ATOM 169 CA MET A 48 6.049 10.959 32.490 1.00 44.83 C ',
'ATOM 170 C MET A 48 4.687 10.621 31.903 1.00 44.85 C ']
这是文件er.pdb
HETATM 168 N MSE A 48 6.674 9.818 33.156 1.00 45.09 N
HETATM 169 CA MSE A 48 6.049 10.959 32.490 1.00 44.83 C
HETATM 170 C MSE A 48 4.687 10.621 31.903 1.00 44.85 C
所以两者都有相同的数字记录(168, 169, 170 等)
我能想到的一种方法是使用 pandas。但是,没有熊猫还有另一种方法吗? 这是我的代码。我使用正则表达式替换某些模式,例如 MSE 到 MET。
import re
with open('er.pdb','r') as f:
contents = f.read()
a = re.findall('.*HETATM.*\s{2}\d{3}\s{1,2}\w{1,2}.*MSE.*', contents)
for i in range(len(a)):
### HETATM to ATOM
a[i] = re.sub(r'^\w{6}', 'ATOM', a[i])
### SE to SD & spacing
a[i] = re.sub(r' SE MSE', ' SD MET', a[i])
### MSE to MET
a[i] = re.sub(r' MSE ', ' MET ', a[i])
### SE to S
a[i] = re.sub(r' SE ', ' S ', a[i])
提前致谢!
【问题讨论】:
-
您的代码现在不工作了吗?如果没有,如果你得到任何输出/错误是什么?
-
你的代码有什么问题?您是在寻求更优雅的解决方案,还是?
-
@bikalpa & @Elrond 支持 Monica 脚本工作,但是
a = re.findall...将所有需要更改的行放入一个列表中,一旦列表中的这些项目在 a[i] 中更改,我需要将它们放回文件er.pdb
标签: python regex bioinformatics python-re