【问题标题】:The format puzzle [closed]格式难题[关闭]
【发布时间】:2013-11-18 12:37:50
【问题描述】:
f = open('file.txt')
print f.read()

这很简单,不是吗?这是有效的,因为 python 知道如何读取和写入.txt 文件。这些格式是如何工作的?我希望构建一个 python 程序来读取至少主要格式的文档(包括 pdf)、电子表格和演示文稿。

现在请不要告诉我,“继续使用 PDFMiner!”; “使用 IronPython 阅读 .doc!”。

我想了解自己,格式魔法是如何发生的。我想知道格式是如何工作的,以便我可以构建自己的“任何格式阅读器”。我不希望解决方案读取各种格式。我想知道它背后的理论。

非常感谢任何指向此类资源的链接,或有关阅读多种格式的帮助。

-谢谢

【问题讨论】:

标签: python file format


【解决方案1】:

不,您完全误解了您的代码在做什么。 Python 不“知道”如何读取 .txt 文件,因为这里没有“格式”。它只是打开一个普通文件并打印出它在那里找到的字节。

PDF 或 DOC 之类的内容完全不同。字节本身没有任何意义:它们是相关应用程序可以理解的文件格式的表示。为了以理解它们包含的内容的方式“读取”它们,您需要构建一个与原始应用程序执行相同操作的解析器。这就是您引用的那些库的作用(尽管 IronPython 是 .NET 中 Python 的实现,与读取 doc 文件无关)。

【讨论】:

  • “字节本身没有任何意义” -> 我会说对于纯文本文件,字节没有任何意义,而在其他格式中,字节确实具有特定含义。
  • In fact in the case of PDF, the bytes actually represent a PostScript program that constructs the document. -- 我不太确定这一行的第二部分。
  • @devnull 有点简化,但基本上是对的:正如wiki 所说,PDF 格式是原始 PS 的标记化版本。
  • 我从未说过 .txt 文件中没有格式
  • @DanielRoseman 基本上正确与否,我不会发表这种说法。这是严重的误导。
【解决方案2】:

读取.txt 文件绝对没有魔法——它只是ASCII 字节,打开和读取文件就是这样做的:读取字节。这是您能找到的最简单的文件格式(因为没有格式)。 PDF 之于纯文本就像可口可乐之于蒸馏水。

然而,PDF 使用的格式非常复杂;读取 PDF 文件只会让 Python 将其视为 .txt 文件。

所以我很抱歉给你一个你不喜欢听到的旧回复:请继续使用 PDFMiner,或阅读其源代码以了解他们如何阅读和解析 PDF 文件:)(或阅读PDF spec 正如 devnull 指出的那样)

【讨论】:

    【解决方案3】:

    您需要查找您要处理的每种格式的规范,例如,this 是 ePub 的规范,它有点宽泛但您明白了,然后您需要自己弄清楚您想要什么处理它。

    【讨论】:

      猜你喜欢
      • 2021-03-02
      • 1970-01-01
      • 2010-10-30
      • 2014-03-01
      • 2011-02-26
      • 2010-10-22
      • 1970-01-01
      • 2011-06-10
      • 2010-09-14
      相关资源
      最近更新 更多