如何使用Python写入CSV文件

时间:2017-06-06 03:57:36

标签: python-3.x csv export-to-csv

背景

我有一个CSV(csv_dump)文件,其中包含MySQL表中的数据。我想将符合特定条件的一些行(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()

问题:

如何复制正在阅读的行复制它"按原样#34;使用Python3进入临时文件?

2 个答案:

答案 0 :(得分:1)

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)

答案 1 :(得分:0)

以下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'。它与从文件中写出原始行不完全相同,但我认为它实际上会快得多,因为如果我们能够检查特定字段的值,有问题的行已经清楚地被解析而没有错误。 / p>