我正在尝试处理大量的txt文件,这些文件本身是我想要处理的实际文件的容器。这些txt文件有sgml标记,用于设置我正在处理的各个文件的边界。有时,这些包含的文件是经过uuencode编码的二进制文件。我已经解决了解码uuencode文件的问题,但在思考我的解决方案时,我确定它不够通用。也就是说,我一直在使用
if '\nbegin 644 ' in document['document']
测试文件是否为uu编码。我进行了一些搜索,并对644的含义(文件权限)有了模糊的理解,然后找到了其他可能具有uu编码文件的示例。
if '\nbegin 642 ' in document['document']
甚至还有其他替代方案。因此,我的问题是如何确保捕获/识别所有包含uuencoded文件的子容器。
一个解决方案是测试每个子容器:
uudecode=codecs.getdecoder("uu")
for document in documents:
try:
decoded_document,m=uudecode(document)
except ValueError:
decoded_document=''
if len(decoded_document)==0
more stuff
这并不可怕,CPU周期很便宜,但我将处理大约800万个文档。
因此,有没有更强大的方法来识别特定字符串是否是uuencoding的结果?