对 CSV 中的所有值求和

Sum all values in CSV

我有一个包含 01 的 CSV 文件,需要确定整个文件的总和。在 ExCel:

中打开时文件看起来像这样
0 1 1 1 0 0 0 1 0 1
1 0 1 0 0 1 1 0 0 0
0 0 1 0 0 0 0 1 0 1
0 1 1 1 1 1 1 0 1 1
0 0 1 0 1 0 1 1 0 1
0 0 0 0 0 0 0 0 1 0
0 0 1 0 0 1 1 0 1 1
0 0 1 1 0 0 1 1 0 1
1 0 1 0 1 0 1 1 1 0
0 1 0 0 1 0 0 0 1 1

使用此脚本,我可以对每一行的值求和,并将它们打印在一列中:

import csv 

import numpy as np

path = r'E:\myPy\one_zero.csv' 

infile = open(path, 'r')

with infile as file_in: 
    fin = csv.reader(file_in, delimiter = ',') 
    for line in fin: 
        print line.count('1')

我需要能够对生成的列进行总结,但我对此的经验并不多。寻找建议。谢谢

path = r'E:\myPy\one_zero.csv' 
infile = open(path, 'r')
answer = 0
with infile as file_in: 
   fin = csv.reader(file_in, delimiter = ',') 
   for line in fin: 
      a = line.count(1)
      answer += a
print answer

示例:

answer = 0
lines = [[1, 0, 0, 1],[1,1,1,1],[0,0,0,1]]
for line in lines:
   a = line.count(1)
   answer += a
print answer
7

一个可能的错误是你使用了:

line.count('1')

line.count(1)

寻找字符串而不是数字

如果您不止有 1 和 0 映射到 int 并对所有行求和:

with open( r'E:\myPy\one_zero.csv') as f:
     r = csv.reader(f, delimiter = ',') 
     count = sum(sum(map(int,row)) for row in r)

或者只数 1:

with open( r'E:\myPy\one_zero.csv' ) as f:
     r = csv.reader(f, delimiter = ',')
     count = sum(row.count("1") for row in r)

只需使用 with open(r'E:\myPy\one_zero.csv'),您不需要也不应该打开然后将文件句柄传递给 with。

为什么要使用 CSV 模块?您有一个充满 0、1、逗号和换行符的文件。只需打开文件,读取()它并计算 1s:

>>> with open(filename, 'r') as fin: print fin.read().count('1')

这应该能满足您的需求,不是吗?