使用python一次读取一个整数

时间:2012-07-19 05:38:31

标签: python file-io python-2.7

如何从文件中读取int?我有一个大的(512MB)txt文件,其中包含整数数据:

0 0 0 10 5 0 0 140
0 20 6 0 9 5 0 0

现在,如果我使用c = file.read(1),我一次只能获得一个字符,但我一次只需要一个整数。像:

c = 0
c = 10
c = 5
c = 140 and so on...

任何伟大的心脏请帮忙。提前谢谢。

3 个答案:

答案 0 :(得分:5)

这是一种方式:

with open('in.txt', 'r') as f:
  for line in f:
    for s in line.split(' '):
      num = int(s)
      print num

通过执行for line in f,您正在逐位阅读(既不使用read() all也不使用readlines)。重要的是因为您的文件很大。

然后你在空格上分割每一行,并在你去的时候读取每个数字。

您可以执行更多错误检查,而不是简单示例,如果文件包含损坏的数据,则会进行barf。

正如评论所说,这对你来说应该足够了 - 否则,如果你的文件可能有很长的行,你可以做一些比一次阅读块更棘手的事情。

答案 1 :(得分:2)

512 MB真的不是那么大。如果你打算创建一个数据列表,我认为一次完成阅读步骤没有问题:

my_int_list = [int(v) for v in open('myfile.txt').read().split()]

如果您可以构建代码以便不需要内存中的整个列表,那么使用生成器会更好:

def my_ints(fname):
    for line in open(fname):
        for val in line.split():
            yield int(val)

然后使用它:

for c in my_ints('myfile.txt'):
    # do something with c (which is the next int)

答案 2 :(得分:-1)

我会这样做:

  • buffer = file.read(8192)
  • contents + = buffer
  • 按空格分割输出字符串
  • 从数组中删除最后一个元素(可能不是完整数字)
  • 用最后一个元素字符串替换内容
  • 重复,直到缓冲区为无。