【问题标题】:How to read Python array from file? [duplicate]如何从文件中读取 Python 数组? [复制]
【发布时间】:2019-02-19 02:26:00
【问题描述】:

我想从一个 txt 文件中写入和读取 Python 数组。我知道如何编写它,但是读取数组需要我提供一个关于数组长度的参数。我事先没有数组的长度,有没有办法在不计算其长度的情况下读取数组。我的工作正在进行中的代码如下。如果我在 a.fromfile 中提供 1 作为第二个参数,它会读取数组的第一个元素,我希望读取所有元素(基本上是要重新创建的数组)。

from __future__ import division
from array import array

L = [1,2,3,4]
indexes = array('I', L)

with open('indexes.txt', 'w') as fileW:
    indexes.tofile(fileW)

a = array('I', [])
with open('indexes.txt', 'r') as fileR:
    a.fromfile(fileR,1)

【问题讨论】:

  • 你来自不同的编程语言吗?因为在python中我们不需要定义数组的大小,我们可以创建列表并使用list
  • 请也尝试向我们提供indexes.txt 的示例内容,以便我们检查似乎是什么问题
  • 如果你解释一下为什么你想使用array而不是list,那也很好。
  • 如果你想用二进制数据做这个,我认为确定数组大小的简单方法是从文件大小计算它。 os 模块中有函数可以高效获取文件大小。
  • 我使用数组来节省内存,我正在处理一个大问题

标签: python arrays


【解决方案1】:

我不知道为什么.fromfile 要求您指定多个对象,但.frombytes 没有。您可以从文件中读取字节并将它们附加到数组中。

这适用于python3:

with open('indexes.txt', 'rb') as fileR:
    a.frombytes(fileR.read())
print(a)

打印:

array('I', [1, 2, 3, 4])

在python2中没有.frombytes但是.fromstring因为str等价于python3bytes

with open('indexes.txt', 'rb') as fileR: 
    a.fromstring(fileR.read())

【讨论】:

  • 我正在使用 Python 2.7 当我使用你的代码时,它告诉我我不能使用“br”,当我用“r”替换它时,我收到以下错误:AttributeError:'array.array '对象没有属性'frombytes'
  • @user58925 我弄得有点乱,现在应该可以了。
  • 完美运行,谢谢
猜你喜欢
  • 2016-03-07
  • 1970-01-01
  • 2016-10-01
  • 1970-01-01
  • 2019-12-13
  • 2020-08-07
  • 2017-04-17
  • 1970-01-01
  • 2022-01-14
相关资源
最近更新 更多