python 按行循环写入一个csv文件,然后在同一文件的不同列开始新的输出

6qqygrtg  于 2022-12-28  发布在  Python
关注(0)|答案(2)|浏览(170)

我想在一个循环中输出一些结果到一个CSV文件。想法是一行一行地写,然后在一个新的循环中输出结果到另一列。这似乎是一个基本的问题,但我不能解决它,只输出我的结果行下一行。我的代码如下,第一行占用一个单元格,其余行占用三个单元格在这种情况下。谁能告诉我正确的方向吗?

f2 = open("output.csv","w", newline='')
writer=csv.writer(f2)

for i in range(len(BeamNum)):
    writer.writerow([BeamNum[i]])
    writer.writerow(["time(s)", "Pos", "Max VM stress (Pa)"])
    for ii in range(NumPrimary.value):
        St7API.St7GetResultCaseTime(1,ii+1,cTime)
        St7API.St7GetBeamResultEndPos(1, St7API.rtBeamAllStress, St7API.stBeamGlobal,
                                      BeamNum[i], ii+1, NumCol, BeamRes)
        writer.writerow([cTime.value, 'End1', BeamRes[19]])
        writer.writerow([cTime.value, 'End2', BeamRes[41]])
58wvjzkj

58wvjzkj1#

像这样编写CSV有点复杂,字节被写入文件,添加另一列需要 * 插入 * 字节,这通常需要保存整个新文件。
你应该做的是创建元组或列表来表示结果行,然后一个一个地写,因为你的代码片段不能执行,所以让我来演示一下:

import csv

data = [(1, 2), (3, 4), (5, 6)]
data_sum = [sum(i) for i in data]  # [3, 7, 11]

with open('/tmp/sum.csv', 'w') as csv_file:
    csv_writer = csv.writer(csv_file)
    csv_writer.writerow(['a', 'b', 'sum'])
    for ((a, b), s) in zip(data, data_sum):
        csv_writer.writerow([a, b, s])

或者将for循环替换为cvs.Writer.writerows()调用:

csv_writer.writerows((a, b, s) for ((a, b), s) in zip(data, data_sum))
yh2wf1be

yh2wf1be2#

import csv

with open('file.csv', 'w', newline='') as csvfile:    
    writer = csv.writer(csvfile)
 
    for row in rows:
        writer.writerow(row)

    # Start a new output to a different column of the same file
    # by writing an empty row to the CSV file
    writer.writerow([])

相关问题