我有一个CSV文件,实际上是一个0和1的矩阵。我需要排除那些有0的列,只选择那些有1的列并将它们复制到另一个CSV文件。
以下是我的尝试:
reader=csv.DictReader(open("test1.csv","r"),[])
for data in reader:
if data==1:
print data
我做错了什么?
答案 0 :(得分:0)
如果您需要排除其中包含任何零的所有列,那么首先需要读取内存中的整个文件 - 因为只有在看过每一行后才能知道哪些列有任何零!这是一个逻辑需求 - 无论你使用哪种语言,这种需求都将保留,这是问题所固有的
所以,例如:
allrows = list(reader)
现在,allrows
是一个词典列表,其项目是字符串,大概是0
或1
。现在,您可以这样做:
keepcols = [c for c in allrows[0] if all(r[c] != '0' for r in allrows)]
......不是最快的方法,但希望非常非常简单易懂!
一旦你知道要保留哪些列,准备一个DictWriter
实例w
,将这些列作为标题和extrasaction='ignore'
参数(因此它将忽略“额外”键传递给它的决定,最后
w.writerows(allrows)
如果您的意思不同于“排除其中包含任何零的所有列”,请详细说明 您的意思是“我需要排除那些有0的列”,因为我可以不同的解释。
答案 1 :(得分:0)
reader = csv.DictReader(open("test1.csv", "r"), [])
for data in reader:
if data[column header] != 0:
print data[column header]