5

如何从文件中读取 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...

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

4

3 回答 3

7

这是一种方法:

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)。很重要,因为您的文件很大。

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

您可以进行比那个简单示例更多的错误检查,如果文件包含损坏的数据,它将失败。

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

于 2012-07-19T05:45:36.203 回答
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)
于 2012-07-19T06:05:20.507 回答
-2

我会这样做:

  • 缓冲区 = file.read(8192)
  • 内容 += 缓冲区
  • 按空格分割输出字符串
  • 从数组中删除最后一个元素(可能不是完整的数字)
  • 用最后一个元素字符串替换内容
  • 重复直到缓冲区为无`
于 2012-07-19T05:46:10.940 回答