如何使用 Python 写入 CSV 文件

How to write into a CSV file with Python

背景:

我有一个 CSV (csv_dump) 文件,其中包含来自 MySQL table 的数据。我想将一些满足特定条件 (row[1] == condition_1 and row[2] == condition_2) 的行复制到临时 CSV 文件 (csv_temp).

代码段:

f_reader = open(csv_dump, 'r')
f_writer = open(csv_temp, 'w')
temp_file = csv.writer(f_writer)

lines_in_csv = csv.reader(f_reader, delimiter=',', skipinitialspace=False)

for row in lines_in_csv:

    if row[1] == condition_1 and row[2] == condition_2:
        temp_file.writerow(row)

f_reader.close()
f_writer.close()

问题:

如何复制正在读取的行,将其 "as is" 复制到 Python3 的临时文件中?

下面的 Python 脚本似乎可以完成这项工作...但是,话虽如此,您可能应该使用 MySQL 查询直接完成这项工作,而不是重新处理来自中间 CSV 文件。但我想一定有一些很好的理由想要这样做?

mycsv.csv:

aa,1,2,5
bb,2,3,5
cc,ddd,3,3
hh,,3,1
as,hfd,3,3

readwrite.py:

import csv

with open('mycsv.csv', 'rb') as infile:
    with open('out.csv', 'wb') as outfile:
        inreader = csv.reader(infile, delimiter=',', quotechar='"')
        outwriter = csv.writer(outfile)
        for row in inreader:
            if row[2]==row[3]:
                outwriter.writerow(row)

out.csv:

cc,ddd,3,3
as,hfd,3,3

再做一些工作,您可以更改 'csv.writer' 以使用与 'csv.reader' 相同的分隔符和 escape/quote 字符。它与从文件中写出原始行并不完全相同,但我认为它实际上会一样快,因为如果我们能够检查特定字段的值,相关行已经被清楚地解析而没有错误。

test.csv

data1,data2,data3
120,80,200
140,50,210
170,100,250
150,70,300
180,120,280

代码在这里

import csv
with open("test.csv", 'r') as incsvfile:
  input_csv = csv.reader(incsvfile, delimiter=',', skipinitialspace=False)
  with open('tempfile.csv', 'w', newline='') as outcsvfile:
    spamwriter = csv.writer(outcsvfile, delimiter=',', quoting=csv.QUOTE_MINIMAL)
    first_row = next(input_csv)
    spamwriter.writerow(first_row)
    for row in input_csv:
        if int(row[1]) != 80 and int(row[2]) != 300:
          spamwriter.writerow(row)

输出tempfile.csv

data1,data2,data3
140,50,210
170,100,250
180,120,280

如果你没有标题删除这两行

    first_row = next(input_csv)
    spamwriter.writerow(first_row)