使用Python从csv文件提取特定列并复制到另一文件

1 投票
2 回答
1716 浏览
提问于 2025-04-16 01:01

我有一个CSV文件,里面其实是由0和1组成的矩阵。我需要把那些全是0的列排除掉,只保留那些有1的列,然后把这些列复制到另一个CSV文件里。

这是我尝试过的代码:

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

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

我哪里做错了呢?

2 个回答

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

for data in reader:
    if data[column header] != 0:
         print data[column header]

当然可以!请把你想要翻译的内容发给我,我会帮你用简单易懂的语言解释清楚。

0

如果你想排除所有包含任何零的列,首先你需要把整个文件读入内存——因为只有在查看了每一行之后,你才能知道哪些列有零!这是一个逻辑上的需求——无论你用什么语言,这个需求都是存在的,它是问题本身的本质。

举个例子:

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' 参数(这样它就会忽略传给它的字典中的“额外”键),最后

w.writerows(allrows)

如果你想表达的意思不同于“排除所有包含零的列”,那么请明确说明所说的“我需要排除那些有0的列”到底是什么意思,因为我无法以其他方式理解。

撰写回答