使用Python搜索Unicode文件

2024-09-26 18:15:33 发布

您现在位置:Python中文网/ 问答频道 /正文

设置

我正在编写一个脚本来处理和注释来自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。如果我跳过第一行,就没有匹配项:

^{pr2}$

同样,使用非Unicode match = 'warning'也不会产生任何结果。在

问题

如何在Python中使用字符串和正则表达式搜索Unicode文件?另外,如何才能重建原始文件?(目标是能够在警告行上编写注释,而不会损坏文件。)


Tags: 文件in字节localmatchlineunicodevariable
2条回答

尝试使用编解码器包:

import codecs
buildLog = codecs.open(sys.argv[1], "r", "utf-16").readlines()

另外,在print语句尝试将字符串转换为控制台编码时,可能会遇到问题。如果你要打印你的评论,你可以用

^{pr2}$

试过这个吗?当用非ascii字符保存解析脚本时,我让解释器在文件前面建议一个替代编码。在

Non-ASCII found, yet no encoding declared.  Add a line like:
# -*- coding: cp1252 -*-

把它作为脚本的第一行就解决了这个问题。不过,不确定这是否是导致错误的原因。在

相关问题 更多 >

    热门问题