【问题标题】:Copy specific rows from csv to csv in Python 2.7在 Python 2.7 中将特定行从 csv 复制到 csv
【发布时间】:2016-12-08 06:08:08
【问题描述】:

到目前为止,我一直在尝试将特定行(包括标题)从原始 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 方式的演示。谢谢。

【问题讨论】:

  • 您是否遇到任何错误?你的解决方案发生了什么?
  • 当我运行它时,它说“预期序列”并指向最后一行。但是,如果我选择 writer.writerow([row]) 就会变得一团糟。
  • 你能举个csv数据的例子吗?

标签: python csv


【解决方案1】:

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)

【讨论】:

  • 感谢您的努力,但它给了我一个关键错误 ['ICLEVEL']。
  • 是的,我只是再次检查了一遍:(
  • 应该可以的。你能放几行你的 CSV 样本吗?
  • 我刚刚用新的 csv 替换了我的旧 csv。它有效,但是,它复制了所有数据,而不是我需要的特定数据。
  • 在这种情况下将skipinitialspace=True 传递给读者可能会有所帮助stackoverflow.com/questions/14885908/…
【解决方案2】:

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

【讨论】:

  • 你做得很好。你能建议如何复制标题吗?
  • 我的 sn-p 的第一行复制了标题。
  • 在 Python 2.7 中为我工作。它怎么不适合你?
  • 感谢您的解决方案!
【解决方案3】:

我实际上会使用 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)

代码更加紧凑。

【讨论】:

  • 我不允许使用 Pandas。您之前的回答是正确的,如果您能恢复它,我将不胜感激。谢谢。
  • 好的,我明白了。我相信@Hussain 的回答实际上更好。
  • 感谢他的帮助,但是它没有过滤数据。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-06-07
  • 1970-01-01
  • 1970-01-01
  • 2015-09-04
  • 2016-12-15
  • 1970-01-01
相关资源
最近更新 更多