在Python 2.7

时间:2016-12-08 06:08:09

标签: python csv

到目前为止,我一直在尝试将特定行(包括原始csv文件中的标题)复制到新文件中。但是,一旦我运行我的代码,它就会复制一个混乱,创建一个巨大的文档。

这是我到目前为止尝试的选项之一,它似乎是最接近解决方案的:

import csv
with open('D:/test.csv', 'r') as f,open('D:/out.csv', 'w') as f_out:
     reader = csv.DictReader(f)
     writer = csv.writer(f_out)
     for row in reader:
         if row["ICLEVEL"] == "1":
            writer.writerow(row)

问题是我只需要复制“ICLEVEL”(标题名称)的值等于“1”的那些行。

注意:test.csv是一个非常庞大的文件,我无法对编写器中的所有标题名称进行硬编码。

非常感谢任何pythonic做这种方式的演示。感谢。

3 个答案:

答案 0 :(得分:3)

writer.writerow需要一个序列(元组或列表)。您可以使用期望DictWriter的{​​{1}}。

dict

答案 1 :(得分:1)

您的row是一本字典。 CSV编写器无法编写字典。从字典中选择值并只写它们:

writer.writerow(reader.fieldnames)
for row in reader:
  if row["ICLEVEL"] == "1":
    values = [row[field] for field in reader.fieldnames]
    writer.writerow(values)

答案 2 :(得分:0)

我实际上会使用Pandas,而不是CSV阅读器:

import pandas as pd

df=pd.read_csv("D:/test.csv")
newdf = df[df["ICLEVEL"]==1]
newdf.to_csv("D:/out.csv",index=False)

代码更加紧凑。