对 CSV 中的所有值求和
Sum all values in CSV
我有一个包含 0
和 1
的 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')
这应该能满足您的需求,不是吗?
我有一个包含 0
和 1
的 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')
这应该能满足您的需求,不是吗?