設置
我正在編寫腳本來處理和註釋從Visual Studio構建日誌。構建日誌是HTML,並且從我可以告訴的是,Unicode(UTF-16?)也是如此。下面是從文件中的一個片段:使用Python搜索Unicode文件
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
在文件的開頭。如果我跳過第一行,我沒有得到任何比賽:
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文件?另外,我該怎麼做才能重建原始文件? (我們的目標是能夠寫上警示線註解沒有重整的文件)使用的編解碼器包
您是否試過按照下面的建議添加一個調用decode()? – hughdbrown 2009-08-05 21:37:04
你在使用python 3.x或者某些2.x版本嗎?如果前者,你會得到字符串作爲unicode。 – hughdbrown 2009-08-05 21:38:35
我撤回我的答案。我嘗試了Alexander Ljungberg的回答,它完美地工作。 – hughdbrown 2009-08-05 21:45:05