Skip to main content
 首页 » 编程设计

python之使用 Python 搜索 Unicode 文件

2025年05月04日16kenshinobiy

设置

我正在编写一个脚本来处理和注释来自 Visual Studio 的构建日志。构建日志是 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)

显然它在文件开头的 0xfeff 中的 0xff 字节处阻塞。如果我跳过第一行,我将找不到任何匹配项:

buildLog = open(sys.argv[1]).readlines() 
 
for line in buildLog[1:]: # Skip the first line. 
    match = u'warning' 
    if line.find(match) >= 0: 
        print line 

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

问题

如何在 Python 中使用字符串和正则表达式可移植地搜索 Unicode 文件?另外,我该怎么做才能重建原始文件? (目标是能够在不破坏文件的情况下在警告行上写注释。)

请您参考如下方法:

尝试使用编解码器包:

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

此外,您可能会遇到打印语句的问题,因为它可能会尝试将字符串转换为您的控制台编码。如果您正在打印您的评论,您可以使用,

print repr(line)