【问题标题】:Open file as a buffer in Python?在 Python 中将文件作为缓冲区打开?
【发布时间】:2014-03-01 18:49:49
【问题描述】:

我有一个压缩的 HDF 文件 (HDF.Z),想这样打开它:

from subprocess import Popen, PIPE
f = Popen(['zcat', 'myfile.HDF.Z'], stdout=PIPE).stdout

为了获取我需要使用 pyhdf 的数据:

from pyhdf.SD import SD, SDC
mydata = SD(f, SDC.READ)

但是,这会导致错误消息:

*** TypeError: coercing to Unicode: need string or buffer, file found

有没有办法将此文件作为缓冲区打开以读取它?顺便说一句:什么是缓冲区?

【问题讨论】:

  • 不应该'myfile.hdf''myfile.hdf.z'
  • @hjpotter92 是的,我在问题中更改了它。
  • @perreal 我如何给它文件的内容?
  • @perreal 号它wants the file name.
  • 由于文件是通过 zcat 提取并用 Popen 打开的,所以我只有标准输出?

标签: python pyhdf


【解决方案1】:

乍一看,我发现没有办法让它访问一个开放的流。

您可以执行以下操作:

  • 在解压文件的位置创建一个临时文件。
  • 将此临时文件的名称提供给SD()

另一个选项非常依赖于系统:您可以获取文件句柄并执行

SD('/dev/fd/%d' % f.fileno(), SDC.READ)

这非常依赖于平台(仅限 Linux),如果 SD() 不小心执行 mmap(),它将失败。

【讨论】:

  • 文件的临时解包工作,虽然这需要更多时间(考虑到我对数百个文件执行此操作的事实)。
猜你喜欢
  • 2020-03-11
  • 2014-02-26
  • 2011-06-02
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-07-07
  • 2021-10-21
  • 1970-01-01
相关资源
最近更新 更多