【问题标题】:Reading integers from a txt file; not coming being recorded as itegers从 txt 文件中读取整数;不来被记录为整数
【发布时间】:2015-02-19 04:17:16
【问题描述】:

我正在从一个文本文件中读取一长串数字。

数字是:

12
42 45
78 30 98
12 45 12 30 ...  and so on

我正在通过以下方式加载数字:

a = open('file', 'r')
lines = a.read()

当我输入 lines[0] 时,我应该得到结果 12,但我得到的是 1。

当我检查我导入的数字的类型时,我得到:

<type 'str'>

我尝试通过以下方式更改数字的类型:

lines = int(lines)

但我收到此错误:

ValueError: invalid literal for int() with base 10:

当字符串是数字时,为什么 python 会导入字符串?!我该如何更改...或者是否需要以不同的方式导入数据?

谢谢:)

【问题讨论】:

    标签: python text import


    【解决方案1】:

    试试:

    with open('file') as f:
        array = []
        for line in f:
            array.append([int(x) for x in line.split()])
    

    a.read() 接受文件大小参数,只返回字符串类型

    【讨论】:

    • 对不起,出现错误.... w, h = [int(x) for x in f.readline().split()] # 读取第一行 ValueError: need more than 1解压价值
    • @Chef1075 是的,这是我的错,我有一个类似的代码,只是复制和粘贴而没有考虑你的变量。我已经编辑了我的答案。
    • 是的!括号!谢谢:)
    • 或者,您可以在一行代码中使用列表理解完成所有操作,如下所示:Lines = [[int(line[line.index(x)]) for x in line] for line in [line.split() for line in open('file')]]
    【解决方案2】:

    文件的内容是字符串,而不是数字,因此您需要包含代码来翻译它们。

    如果你的数字都用空格分隔,你可以这样做:

    a = open( 'file', 'r' )
    for line in a:
        numbers = [ int( x ) for x in line.split() ]
        # Do something with numbers
    

    最后一行分为以下几部分:

    line.split() # 将一行分成N个元素,每个元素用空格分隔

    int( x ) # 把字符串表示成整数

    [ int( x ) for x in line.split() ] # 创建一个元素列表,其中每个元素都是 int( x ) 在行的每个空格分隔部分上的结果。

    【讨论】:

    • 这行得通,我理解它背后的原因!但是,我丢失了数据的结构。以前是 1 个号码 \n 2 个号码 \n 3 个号码...现在是一长串。还是正确的!
    【解决方案3】:

    尝试使用

    a = open('file', 'r')
    lines = a.readlines()
    

    这样你会得到一个数字列表。另一方面,你得到了

    ValueError: invalid literal for int() with base 10:
    

    因为你有换行符或回车符

    【讨论】:

      猜你喜欢
      • 2018-07-22
      • 2017-08-23
      • 1970-01-01
      • 1970-01-01
      • 2012-11-22
      • 1970-01-01
      • 2018-08-23
      • 2013-06-03
      • 1970-01-01
      相关资源
      最近更新 更多