在Python2.7中将特定行从csv复制到csv

2024-09-23 10:43:26 发布

您现在位置:Python中文网/ 问答频道 /正文

到目前为止,我一直在尝试将特定的行(包括头)从原始的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”的行。在

注:测试.csv是一个非常大的文件,我不能硬编码所有的头名称在编写器。在

任何关于Python做这件事的演示都是非常感谢的。谢谢。在


Tags: 文件csv代码文档import名称as选项
3条回答

你的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)

我会用熊猫,而不是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)

代码更紧凑。在

writer.writerow需要一个序列(元组或列表)。您可以使用DictWriter,它需要一个dict。在

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

相关问题 更多 >