Python - 读取文件后将字符串转换为整数

-2 投票
4 回答
3363 浏览
提问于 2025-04-18 05:13

我在想有没有人知道怎么读取一个文件,并把输出的代码转换成整数,而不是字符串。我遇到了几种不同的错误,目前这个错误是“TypeError: 'str'对象不能被解释为整数”。我搜索了很多信息,但都没有找到结果。这是我的代码:

additionalBonusRates = open("additionalBonusRates.txt", 'r')
            global kluger_additional      
            kluger_additional = additionalBonusRates.readline('\n')
            global patrol_additional
            patrol_additional = additionalBonusRates.readline('\n')
            global territory_additional
            territory_additional = additionalBonusRates.readline('\n')
            additionalBonusRates.close()
            kluger_additional = int(kluger_additional)
            patrol_additional = int(patrol_additional)
            territory_additional = int(territory_additional)

4 个回答

0

看起来你在使用python3。你遇到的错误不是因为把字符串转换成整数,而是因为在调用readline([n])时传入了'\n'。这个可选参数[n]是指你想读取的最大字节数。你应该使用"rstrip"来去掉换行符,这样才能正确转换成整数:

kluger_additional = int(additionalBonsuRates.readline().rstrip())
0

这可能是因为有一行是空的,所以出现了错误。请试试下面的代码,可能会对你有帮助。

        additionalBonusRates = open("additionalBonusRates.txt", 'r')
        global kluger_additional      
        kluger_additional = additionalBonusRates.readline('\n').strip()

        if kluged_additional: # only go on if the line was not blank
            kluger_additionalINT = int(kluger_additional)
1

文件对象里没有 readint 这个函数。你现在做的其实是把数据从你自己定义的文件格式中读取出来,这个过程叫做反序列化。

我不太确定你是在用 Python 2.7 还是 3.4,但要记住,文件对象读取的是原始字符串,也就是一串字节。

你现在的做法是对的,不过我有一些建议可以让它更好:

  • 请尽量避免使用全局变量,这样会让程序员或者维护者感到困惑。

  • 使用 with 语句来打开文件,这样可以确保文件在使用完后能正确关闭。

  • 你可以把反序列化的过程放在一个函数里,这样可以隐藏字符串到整数的转换过程。

  • 尽量遵循 PEP8 的建议,避免使用过长的变量名。

下面是一个示例:

def read_add_bonus_rates(txt_path):
    with open(txt_path, 'r') as txt_file:
        kluger_add = int(txt_file.readline())
        patrol_add = int(txt_file.readline())
        territory_add = int(txt_file.readline())
    return (kluger_add, patrol_add, territory_add)

def main():
    rates = """\
    150
    160
    180
    """
    with open('rates.txt', 'w') as rates_file:
        rates_file.write(rates)
    print(repr(read_add_bonus_rates('rates.txt')))


if __name__ == '__main__':
    main()
2

我没有足够的积分来评论,但你的错误是因为你把一个字符串作为参数传给了 readline()

另外,为什么要用这么多全局变量?你真的需要这样吗?如果不是特别必要,通常不建议这样声明全局变量。

如果你在处理数字数据文件,我还建议你看看 numpy。

撰写回答