【发布时间】:2021-06-15 08:18:52
【问题描述】:
我有一个如下所示的文件:
;
[ atomtypes ]
opls_BZCG BCG1 78.113999 0.000 A 2.9310E-01 1.9173E-01
[ moleculetype ]
; Name nrexcl
BZCG 1
[ atoms ]
; nr type resnr residue atom cgnr charge mass
1 opls_BZCG 1 BZCG BCG1 1 0 78.113999
我正在尝试使用 python 更改 [ atomtypes ] 标题下倒数第二个和最后一个字段中的值。交易是我正在运行一个迭代更新此文件的代码,因此我特别希望该字段成为目标,而不是正则表达式“2.931E-01”或“1.9173E-01”。我知道我们可以使用 awk 之类的东西,但我想知道这是否可以通过 python 本身实现。
这就是我目前正在做的事情:
flag = 0
with open("file.itp") as f:
for line in f:
iterable = line.strip().split()
if flag:
line.strip().split()[5] = sigma
line.strip().split()[6]) = eps
print("epsilon is {} and sigma is {}".format(eps, sigma))
if "atomtypes" in iterable:
flag = 1
else:
flag = 0
f.close()
我正在更改 python 中的值,但我无法将该更改发送到文件本身。我该如何解决这个问题?
您的任何建议将不胜感激!
【问题讨论】:
-
我不确定您尝试更新的文件格式。但是,如果您正在处理一个 .txt 文件,我认为可能分割每一行。
-
所以我加载整个文件,更改 2 个数字,然后继续?@TahaJaliliTATI
-
不需要加载整个文件,可以逐行解析:stackoverflow.com/a/8010133/2237151
-
@Pietro,所以我一行一行地执行 line.strip().split(),我更改了两个数字......但是如何将这些信息发送回文件?我想更改数字并更新文件本身。
-
您必须将其写入具有临时名称的新文件,然后在完成后删除旧文件并将新文件重命名到位。
标签: python text-processing python-textprocessing