我正在编写一个脚本来处理和注释来自visualstudio的构建日志。构建日志是HTML,据我所知,是Unicode(UTF-16?)也。以下是其中一个文件的片段:
c:\anonyfolder\anonyfile.c(17169) : warning C4701: potentially uninitialized local variable 'object_adrs2' used
c:\anonyfolder\anonyfile.c(17409) : warning C4701: potentially uninitialized local variable 'pclcrd_ptr' used
c:\anonyfolder\anonyfile.c(17440) : warning C4701: potentially uninitialized local variable 'object_adrs2' used
文件的前16个字节如下所示:
feff 003c 0068 0074 006d 006c 003e 000d
文件的其余部分也是空字节。在
我希望能够对这些文件执行字符串和正则表达式搜索/匹配。但是,当我尝试下面的代码时,我得到一个错误消息。在
buildLog = open(sys.argv[1]).readlines()
for line in buildLog:
match = u'warning'
if line.find(match) >= 0:
print line
错误消息:
Traceback (most recent call last):
File "proclogs.py", line 60, in
if line.find(match) >= 0:
UnicodeDecodeError: 'ascii' codec can't decode byte 0xff in position 0: ordinal not in range(128)
显然,它在文件开头的0xff
字节中阻塞了0xfeff
。如果我跳过第一行,就没有匹配项:
同样,使用非Unicode match = 'warning'
也不会产生任何结果。在
如何在Python中使用字符串和正则表达式搜索Unicode文件?另外,如何才能重建原始文件?(目标是能够在警告行上编写注释,而不会损坏文件。)
尝试使用编解码器包:
另外,在print语句尝试将字符串转换为控制台编码时,可能会遇到问题。如果你要打印你的评论,你可以用
^{pr2}$试过这个吗?当用非ascii字符保存解析脚本时,我让解释器在文件前面建议一个替代编码。在
把它作为脚本的第一行就解决了这个问题。不过,不确定这是否是导致错误的原因。在
相关问题 更多 >
编程相关推荐