我正在计算文本文件不同列中两个数字的值(数字)。然后我迭代多个文本文件来进行相同的计算。我需要将输出写入CSV文件的不同列,其中每列对应于从单个文本文件获得的计算。我或多或少知道如何迭代不同的文件,但我不知道如何告诉Python写入不同的列。任何指导都表示赞赏。
答案 0 :(得分:0)
您可以使用zip
提供延迟迭代的事实来非常有效地执行此操作。您可以定义一个简单的生成器函数,该函数为初始化的文件的每一行进行计算。您还可以使用contextlib.ExitStack
在单个上下文管理器中管理打开的文件:
from contextlib import ExitStack
from csv import writer
def calc(line):
# Ingest a line, do some calculations on it.
# This is the function you wrote.
input_files = ['file1.txt', 'file2.txt', ...]
def calculator(file):
"""
A generator function that will lazily apply the calculation
to each line of the file it is initialized with.
"""
for line in file:
yield calc(line)
with open('output.csv', 'w') as output, ExitStack() as input_stack:
inputs = [calculator(input_stack.enter_context(open(file))) for file in input_files]
output_csv = writer(output)
output_csv.wite_row(input_files) # Write heading based on input files
for row in zip(*inputs):
output_csv.write_row(row)
CSV中的输出与input_files
中的文件名的顺序相同。