【发布时间】:2011-12-03 14:15:29
【问题描述】:
我有包含 invalid characters sequences 的 XML 文件,这会导致解析失败。它们看起来像。为了解决这个问题,我通过用转义序列替换整个事情来逃避它们: --> !#~10^。然后在我完成解析后,我可以将它们恢复到原来的样子。
buffersize = 2**16 # 64 KB buffer
def escape(filename):
out = file(filename + '_esc', 'w')
with open(filename, 'r') as f:
buffer = 'x' # is there a prettier way to handle the first one?
while buffer != '':
buffer = f.read(buffersize)
out.write(re.sub(r'&#x([a-fA-F0-9]+);', r'!#~\1^', buffer))
out.close()
文件非常大,所以我必须使用缓冲(mmap 给了我一个MemoryError)。因为缓冲区具有固定大小,所以当缓冲区恰好小到足以拆分序列时,我会遇到问题。想象一下缓冲区大小是8,文件是这样的:
123456789
hello!&x10;
缓冲区只会读取hello!&x,允许&x10; 溜过裂缝。我该如何解决这个问题?如果最后几个看起来可以属于一个字符序列,我想得到更多的字符,但是我想到的逻辑很丑。
【问题讨论】: