将字符串转换为float

时间:2015-03-05 03:18:33

标签: python python-2.7

我正在尝试编写一个程序来计算文件中的值。例如,我收到一个包含这样的数字的文件

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时它不会返回一致的结果,即使它们应该是相同的答案。

有什么想法?

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]