背景
我有一个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进入临时文件?
答案 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>