Skip to main content

根据 OpenDocument 格式文件和其他档案的内容生成文本信息。

项目描述

根据 OpenDocument 格式文件和其他档案的内容生成文本信息。

生成的信息包括存档成员的名称、未压缩大小和修改时间等元数据。

计算校验和,并对每个执行基本文件类型检测。

对于确定包含 UTF-8 文本的每个成员,将输出文件中的行。

odfit与odt2txt之类的工具在用途上相似,但在操作上和细节级别上不同,后者将存档的文本模式渲染输出为文档。

这意味着它提供了更完整的数据集,包括嵌入的宏、格式和其他详细信息。

二进制文件的信息仅限于元数据和散列,包括 SHA1 校验和。

XML 文件将被漂亮地打印,以使其内容更容易区分

设置

odfit脚本可以使用标准库的模块补充

它将尝试使用lxml包进行 XML 漂亮打印,但如有必要,将回退到标准库模块。

因此应该可以在任何 Python 2.6 或更高版本中使用odfit,而无需安装。

这意味着可执行模块文件odfit.py 可以与源代码库一起分发,具有一定的可靠性。

早于 2.6 的 Python 也可以工作,但该脚本尚未经过测试。

如果lxml可用,则在处理不正确或不完整的 XML 时,XML 处理将更快(> 3 倍)并且更健壮。

除了直接运行脚本odfit.py 之外,还可以从源代码或通过PyPI安装该模块。这将导致在系统范围内安装等效脚本,从而在系统路径上启用命令odfit 。

用法

odfit是一个命令行工具。

要获取档案成员的列表,请运行例如

$ odfit some_file.odt

对于典型的 OpenOffice 文档,这将产生多行数据。

odfit主要用于git等版本控制系统,以识别 OpenDocument 格式文件版本之间的更改。

例如,对于 git 1.6.1 或更高版本,设置一个 repo 以使用odfit生成git diff列表可以通过以下方式完成

  • 将行添加到.git/config或等效项以设置odf驱动程序名称的textconv选项:

    [diff "odf"]
        textconv=odfit -D
  • 通过在 repo 工作树或.git/info/attributes中的.gitattributes文件中添加如下行,将各种 ODF 文件类型与odf驱动程序名称相关联:

    *.odt diff=odf
    *.ods diff=odf
    *.odp diff=odf
    *.odb diff=odf

odfdump-D选项指示它忽略每个存档成员的时间戳。每当保存新版本的文档时,OpenOffice 似乎都会为所有成员重置此时间戳。因此,这条数据没有意义,通常不应显示为差异的一部分。出于这个原因,我希望在生成转储以进行比较时通常应该传递-D 。

更多信息(基于使用odt2txt而不是odfit)可从git wiki获得。

odfit也适用于其他 pkzip 格式的档案。请参阅BUGS、ISSUES 和 WARNINGS中有关文件类型检测的说明。

输出格式

元数据头

每个包含文件的输出将由一系列标题行组成,每个标题行都以成员文件名和一个冒号为前缀,后跟两个空格。例如:

path/to/member/file:  date_time: 2010-10-12T21:32:24
path/to/member/file:  file_size: 42
path/to/member/file:  CRC: 4144865272

每行包含一个名称/值对,由附加的冒号和空格分隔。

包含在标头中的元数据是存储在存档文件本身中的元数据,加上sha1元素的例外,它是由odfit从存档成员的数据中计算出来的。

并非所有成员属性都被转储。如果给定存档成员非空,则转储的属性是:

  • 时间戳:date_time

  • 评论

  • 额外的

  • 文件大小

  • CRC-32 校验和:CRC

只有在命令行上没有传递-D选项时才会输出时间戳。

在这些属性之后,将输出另外两个标题行,包含成员的 SHA-1 哈希和检测到的文件类型。检测到的文件类型将是 binaryutf-8(包含 ASCII)或unknown

内容部分

在标头之后,可打印文件(文件类型为utf-8的文件)将转储其内容。

内容部分的输出类似于标题部分的输出。

不是名称/值对,而是输出文件的行。

文件名和内容之间的分隔符是两个冒号和一个空格。

例如:

path/to/member/file:: The first line of the file
path/to/member/file:: The second line of the file
path/to/member/file:: The third line of the file

如果文件未被检测为二进制文件,则假定该文件是可打印的。有关详细信息,请参阅文件类型检测

XML 文件

名称以.xml结尾的文件的内容 将在转储之前通过 XML 整理例程传递。

这旨在通过拆分包含多个元素的长行来使输出更具差异性。

因此,包含格式不正确的 XML 的文件的存在可能会导致错误。对于使用 OpenOffice 创建的文档,这应该不是问题。

错误、问题和警告

  • 二进制文件类型检测使用与git diff相同的愚蠢算法:在文件的前 8000 个字节内扫描空值。这适用于 ASCII 或 UTF-8 文本,但会错误地检测为 UTF-16 等编码中的二进制文件。

  • 没有计划保证版本之间的一致性。因此,不应将使用旧版本odfit 创建的转储与使用较新版本创建的转储进行比较。即使使用相同版本的odfit,由于不同的依赖关系,同一文档的转储可能会有所不同: odfit将根据本地安装的内容使用不同的 XML 包,并且 XML 文件的漂亮打印输出将根据使用的 XML 包而有所不同. 如果本地可用,将使用lxml包。

  • 输出格式仅用于读取和比较目的。它不打算成为原件的可逆翻译,即使对于仅包含文本文件的档案也是如此。特别是,包含 ':' 字符的文件名没有正确转义。包含具有相同文件名的成员的文件的转储中将存在额外的歧义。

  • 我还没有检查 odf 文件成员的顺序是否稳定。 odfit目前在输出之前不对成员进行排序:成员输出按存档文件顺序完成。这意味着对等文件的转储进行比较可能最终会显示出显着差异。

  • 可以进行许多性能优化,特别是如果将脚本重新设计为 diff 例程。例如,拥有两个比较文档的知识将允许 odfit仅输出已更改文件的 XML。SHA-1 比较也不太可能检测到 CRC-32 比较无法检测到的变化。

  • odfit未使用 2.6 以外的 Python 版本进行测试。这意味着几乎不能保证它可以在任何特定系统上运行,因为 2.5 甚至 2.4 在该领域并不少见。

执照

odfit是 Ted Tibbetts 的版权 2010,并根据 FreeBSD 许可证获得许可。

有关详细信息,请参阅文件复制。

项目详情


下载文件

下载适用于您平台的文件。如果您不确定要选择哪个,请了解有关安装包的更多信息。

源分布

odfit-0.6.2.tar.gz (10.5 kB 查看哈希

已上传 source