【问题标题】:Python Can't Read Corrupted XMLPython 无法读取损坏的 XML
【发布时间】:2015-09-24 02:02:24
【问题描述】:

我有一堆已损坏的 XML 文件。其中仍然有一些未损坏的数据。这是我正在谈论的图片:

我想用python遍历每个文件并抓取未损坏的数据,但是当我用python打开文件时:

i2 = open(x + '/' + i, 'r')

它会打开文件,但当我尝试通读它时,它又告诉我说只有这个是从文件中读取的:

'\xa8\x9f\xb0\xdb\x17\xa1\t&}4U\xccsr\xcfN\x7fS\xa1C\xb5\xa4\xd6a\x84i'

我尝试了几种不同的编码,但它总是返回错误:

i2 = open(x + '/' + i, 'r', encoding='utf8')
i2 = open(x + '/' + i, 'r', encoding='ANSI')

如果您知道 Python 为何无法正确读取此文件,请告诉我。

【问题讨论】:

  • Python 应该如何知道文件的哪一部分已损坏,哪部分未损坏?它只看到随机字节。
  • 您可以试试strings(1) 程序。如果您确实使用python,请以rb 模式打开它并使用bytes 而不是使用编码。
  • 在我的屏幕截图中间有大约 10 行包含日期和记录特定信息的行。我知道我希望 python 在每一行中找到的键。上面的键是 02/27/2009。如果那一行,那么我想保存它。
  • @o11c frig 知道了。伙计,我有时很愚蠢,将其添加为答案。

标签: python xml


【解决方案1】:

您将无法在文本模式下读取该文件。毫无疑问,当您尝试这样做时,python 会将零字节视为终止符。

尝试以二进制模式打开它,mode='rb',并避免使用 readline() 等假定内容为文本的读取函数。有一个stackoverflow问题已经涉及读取二进制文件:

Reading a binary file with python

您必须通过逐字节检查二进制值并将连续的有效字节(我假设为 ASCII 或 UTF-8)保存到字符串中来提取“未损坏”部分,然后打印出来或写入另一个文件。

【讨论】:

  • python 没有将'\0' 视为终结者
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2018-08-19
  • 2019-04-18
  • 2019-09-26
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多