如何跳过 2 个文件中的大量文本或值并使用数据执行另一项任务

How to skip a lot of text or values in 2 files and do another task with the data

在下面的代码中,我想跳过内容(文件 ex1.idlex2.idl 中有很多不可用的内容)并获取要处理的数据。此数据从每个文件每一行的第 905 个值开始。文件片段为:

ex1.idl

0.11158E-13 0.11195E-13 0.11233E-13 ...

ex2.idl

0.11010E-13 0.11070E-13 0.11117E-13 ...

我可以成功跳过不需要的值。我还可以进行一些拆分、切片和计算。但是当我将两者结合起来时,代码似乎不起作用。以下是我的组合代码:

with open('ex1.idl') as f1, open('ex2.idl') as f2:
    with open('ex3.txt', 'w') as f3:

        a = 905                           #the first part
        f1 = f1.readlines(905:)[a-1:]     #the first part
        f2 = f2.readlines(905:)[a-1:]     #the first part

        f1 = map(float, f1.read().strip().split())              #the second part
        f2 = map(float, f2.read().strip().split())              #the second part
        for result in map(lambda v: v[0]/v[1], zip(f1, f2)):    #the second part
            f3.write(str(result)+"\n")                          #the second part

这是我刚刚读取数据并单独进行拆分和计算的代码。这有效:

with open('primer1.idl') as f1, open('primer2.idl') as f2:
with open('primer3.txt', 'w') as f3:

    f1 = map(float, f1.read().strip().split())
    f2 = map(float, f2.read().strip().split())
    for result in map(lambda v: v[0]/v[1], zip(f1, f2)):

        f3.write(str(result)+"\n")

所以我只想补充一点,程序在905行开始读取和计算。

提前感谢您的回答。

试试这个:

from itertools import islice


with open('ex1.idl') as f1, open('ex2.idl') as f2:
    with open('ex3.txt', 'w') as f3:
        f1 = islice(f1, 905, None)  # skip first 905 lines
        f2 = islice(f2, 905, None)  # skip first 905 lines

        for f1_line, f2_line in zip(f1, f2):
            f1_vals = map(float, f1_line.strip().split())
            f2_vals = map(float, f2_line.strip().split())
            for result in map(lambda v: v[0]/v[1], zip(f1_vals, f2_vals)):
                f3.write(str(result)+"\n")

这将忽略每个文件中的前 904 个值。然后它将文件的内容压缩在一起,以便将每个文件中的相应行放在同一个元组中。然后你可以遍历这个压缩数据并拆分 space 上的每一行,将值转换为浮点值,然后进行除法。

请注意,如果任一文件中的一行包含零,那么您可能会遇到 float division by zero 异常。请确保文件中没有零。 如果无法确保其中没有零,则应使用 try-except 处理它,然后跳过:

with open('ex1.idl') as f1, open('ex2.idl') as f2:
    with open('ex3.txt', 'w') as f3:
        f1 = islice(f1, 905, None)  # skip first 905 lines
        f2 = islice(f2, 905, None)  # skip first 905 lines

        for f1_line, f2_line in zip(f1, f2):
            f1_vals = map(float, f1_line.strip().split())
            f2_vals = map(float, f2_line.strip().split())
            for v1, v2 in zip(f1_vals, f2_vals):
                try:
                    result = v1/v2
                    f3.write(str(result)+"\n")
                except ZeroDivisionError:
                    print("Encountered a value equal to zero in the second file. Skipping...")
                    continue

你可以做任何你喜欢的事,除了跳绳。由你决定。

我在这里做了一些工作,发现这也有效:

with open('ex1.idl') as f1, open('ex2.idl') as f2:
    with open('ex3.txt', 'w') as f3:

        start_line = 905        #reading from this line forward
        for i in range(start_line - 1):
            next(f1)
            next(f2)
        f1 = list(map(float, f1.read().split()))
        f2 = list(map(float, f2.read().split()))
        for result in map(lambda v : v[0]/v[1], zip(f1,f2)):
            f3.write((str(result)) + '\n')