2017-06-06 67 views
0

背景:如何写入一个CSV文件与Python

我有一个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() 

问:

我如何可以复制正在读取行复制 “原样” 与Python3临时文件?

回答

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) 
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”。这与从文件中写出原始文件不完全一样,但我认为它实际上一样快,因为如果我们已经能够检查特定字段的值,那么所述行已经被清楚地解析而没有错误。

+0

似乎没有任何简单的方法输出来自输入CSV文件的* raw *行。我唯一的想法是继承Python的'file'类。我尝试过,但是这并不是微不足道的,因为_csv模块一次不会看完整行。 – jdpipe