如何使一些文字前一行?

2024-06-30 08:38:32 发布

您现在位置:Python中文网/ 问答频道 /正文

我有这样一个文本文件:

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)]

Tags: 文件in目的for市场a1line数字
1条回答
网友
1楼 · 发布于 2024-06-30 08:38:32

你的尝试只会挑出其中有“epsilon”的行。相反,您希望收集所有行,但如果没有“epsilon”,则追加到前一行

a1 = []
with open(filename, 'r') as f1:
    for line in f1:
        line = line.rstrip('\n')
        if "epsilon" in line:
            a1.append(line)
        else:
            a1[-1] += line

如果该行不包含“epsilon”,则会将该行粘贴到前一行的末尾(a1[-1],即a1中到目前为止的最后一个元素),否则会复制现有逻辑

如果第一行不包含“epsilon”,这将崩溃,但我将其留给您,以使其对您的用例具有健壮性

可能避免硬编码复杂的路径;在当前目录中查找文件,或者让脚本接受输入文件名作为命令行参数

相关问题 更多 >