【问题标题】:to extract specific columns from a csv file and copy it to another using python从 csv 文件中提取特定列并使用 python 将其复制到另一个
【发布时间】:2010-07-09 03:02:27
【问题描述】:

我有一个 CSV 文件,它实际上是一个 0 和 1 的矩阵。我需要排除那些有 0 的列,只选择那些有 1 的列并将它们复制到另一个 CSV 文件。

这是我尝试过的:

    reader=csv.DictReader(open("test1.csv","r"),[])

for data in reader:
        if data==1:
                print data

我做错了什么?

【问题讨论】:

    标签: python csv


    【解决方案1】:

    如果您需要排除所有包含 any 零的列,那么首先您需要读取内存中的整个文件——因为只有在查看每一行之后,您才会知道哪些列包含任何零!这是一个合乎逻辑的需求——无论你使用什么语言,需求都会保留,这是问题的本质

    所以,例如:

    allrows = list(reader)
    

    现在,allrows 是一个字典列表,其项目是字符串,大概是 01。现在,你可以这样做:

    keepcols = [c for c in allrows[0] if all(r[c] != '0' for r in allrows)]
    

    ...不是最快的方法,但希望非常非常容易理解!

    一旦您知道要保留哪些列,请准备一个 DictWriter 实例 w,其中这些列作为标题和 extrasaction='ignore' 参数(因此它将忽略传递给它的 dicts 中的“额外”键,最后

    w.writerows(allrows)
    

    如果您的意思不同于“排除所有包含零的列”,那么请准确说明什么您所说的“我需要排除那些包含 0 的列”,因为我可以不要以不同的方式解释它。

    【讨论】:

    • 您已经正确解释了它......我的意思是“排除所有包含零的列”......但我不明白extrasaction和标题部分......请详细说明谢谢你这么多...... :)
    • 没有太多要详细说明的内容——只需阅读docs.python.org/library/… 并使用fieldnames 作为我所说的headers
    • @Anand,您可能似乎错了,但是在分配allrows 一个字典列表后,我刚刚将其复制并粘贴到我的 Python 2.6 解释器中,但它没有似乎it 来说是错误的...而且我怀疑 Python 解释器在语法正确或错误方面比您更可能是正确的。
    【解决方案2】:
    reader = csv.DictReader(open("test1.csv", "r"), [])
    
    for data in reader:
        if data[column header] != 0:
             print data[column header]
    

    【讨论】:

      猜你喜欢
      • 2016-06-07
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-12-19
      • 2020-11-25
      • 2015-11-21
      • 2021-02-26
      • 1970-01-01
      相关资源
      最近更新 更多