我正在尝试编写一个程序来计算文件中的值。例如,我收到一个包含这样的数字的文件
2222(第一行)
4444(第二行)
1111(第三行)
我的程序采用输入文件的名称(E.G.File.txt)和数字列来计算。所以例如,如果我的file.txt包含上面的数字,我需要第2列的总和,我的函数应该能够打印7(2 + 4 + 1)
t1 = open(argv[1], "r")
number = argv[2]
k = 0
while True:
n = int(number)
t = t1.readline()
z = list(t)
if t == "":
break
k += float(z[n])
t1.close()
print k
当我将它设置为0时,此代码适用于第一列,但是当我将其设置为1时它不会返回一致的结果,即使它们应该是相同的答案。
有什么想法?
答案 0 :(得分:0)
一个更加丑陋的实现,展示了zip
:
def sum_col(filename, colnum):
with open(filename) as inf:
columns = zip(*[line.strip() for line in inf])
return sum([int(num) for num in list(columns)[colnum]])
zip(*iterable)
从行方向翻转到列方式,所以:
iterable = ['aaa','bbb','ccc','ddd']
zip(*iterable) == ['abcd','abcd','abcd'] # kind of...
zip对象不可订阅,因此我们需要在下标之前进行转换(执行[colnum]
)。或者我们可以这样做:
...
for _ in range(colnum-1):
next(columns) # skip the columns we don't need
return sum([int(num) for num in next(columns)])
或者只计算所有总和并获得我们需要的总和
...
col_sums = [sum(int(num) for num in column) for column in columns]
return col_sums[colnum]