到目前为止,我一直在尝试将特定行(包括原始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做这种方式的演示。感谢。
答案 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)
代码更加紧凑。