【发布时间】:2021-05-18 04:32:47
【问题描述】:
我有一个这样的文本文件:
1156348 epsilon[998] B 1e-08
1156349 epsilon[999]B 1e-08
1156350 epsilon[1001]
B 1e-08
1156351 epsilon[1002]
B 1e-08
1156352 epsilon[1003]
B 1e-08
如您所见,最后 3 行与前 2 行略有不同。我怎样才能像这样将那些B 带到上面的行:
1156348 epsilon[999] B 1e-08
1156349 epsilon[1000]B 1e-08
1156350 epsilon[1001]B 1e-08
1156351 epsilon[1002]B 1e-08
1156352 epsilon[1003]B 1e-08
目的是获取每一行的数字。这是更大文件的一部分。我发现所有行都包含 epsilon,然后抓取数字1e-08。但是因为在索引 1000 之后它们在。下一行我无法抓住它们。
a1=[]
f1 = open('/Users/naghmeh/Documents/skill_trend/optimization/typex2.txt', "r")
for line in f1:
if "epsilon" in line:
a1.append(line)
f.close()
t=[float(s.split()[3]) for s in map(str.strip, a1)]
【问题讨论】:
-
您搜索了什么,找到了什么?你尝试过什么,它是如何失败的?转换的原理是什么——字段太少就合并,行太短就合并,第一个非空白token是B就合并?
-
@tripleee 我尝试在索引 1000 之后使用 for 循环,但我无法编写用于修复行的代码。
-
您可以在任何 IDE 中使用正则表达式查找和替换。在 python 中,
import re; d = open('file.txt').read(); d = re.sub('\n.*?B','B', d); open('file.txt', 'w').write(d) -
@tripleee 请查看编辑。
-
f.close()是一个NameError,你的意思是f1;但是使用with open上下文管理器更加优雅和强大。