首页 文章

sums.append(map(int,row))ValueError:int()的基数为10的无效文字:''

提问于
浏览
0

我正在用Python 2.7编写一个小程序,它从文本文件中读取每行的四个数字,并计算每行的总和

file.txt:

1 2 4 5
5 5 5 12
3 3 89 21
1 0 5 6

我的节目:

def CalcSum(a,b,c,d):
    sum = a+b+c+d
    return sum

with open('file.txt', 'r') as i_file:
    reader = i_file.readline()
sums = []
for row in reader:
    sums.append(map(int, row))

for dt in sums:
    dt.append(CalcSum(dt[0], dt[1], dt[2], dt[3]))
print sums
i_file.close()

但当我朗读我的程序时,我得到了这个错误:

Traceback(最近一次调用最后一次):文件“/home/Erick/Desktop/testpy.py”,第10行,在sums.append中(map(int,row))ValueError:对于带有基数为10的int()的无效文字: “”

我该如何解决这个错误?提前致谢!!!

1 回答

  • 2

    我想你可能缺少 s

    with open('file.txt', 'r') as i_file:
        reader = i_file.readlines()
    

    然后用

    sums.append(map(int, row))
    

    您正在将 int 应用于文件中的每一行,而不是每个单独的数字 .

    在代码中进一步向下,你有另一个错误

    for dt in sums:
        dt.append(CalcSum(dt[0], dt[1], dt[2], dt[3]))
    

    将总和追加到找到的每个数字列表中 .

    最后

    i_file.close()
    

    不必要地关闭文件,因为它将由 with 语句创建的上下文管理器关闭(这正是 with 的目的)

    所以,要很好地包装它,这里是完整修复的代码

    def CalcSum(a,b,c,d):
        sum = a+b+c+d
        return sum
    
    with open('file.txt', 'r') as i_file:
        reader = i_file.readlines()
    sums = []
    for row in reader:
        sums.append(map(int, row.split()))
    
    final_sums = []
    for dt in sums:
        final_sums.append(CalcSum(dt[0], dt[1], dt[2], dt[3]))
    print final_sums
    

    为了使它更加pythonic,让我建议一个替代的,更简洁的整个算法版本

    with open('file.txt', 'r') as i_file:
        final_sums = [sum(map(int,row.split())) for row in i_file]
    

    如果文件包含:

    1 2 4 5
    5 5 5 12
    3 3 89 21
    1 0 5 6
    

    final_sums 将举行

    [12, 27, 116, 12]
    

    注意: readlines() 读取内存中文件的全部内容 . 如果文件很大,那将是不方便的 . 一次读取一行内容更具可扩展性 .

相关问题