如何跳过 2 个文件中的大量文本或值并使用数据执行另一项任务
How to skip a lot of text or values in 2 files and do another task with the data
在下面的代码中,我想跳过内容(文件 ex1.idl
和 ex2.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')
在下面的代码中,我想跳过内容(文件 ex1.idl
和 ex2.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')