比较Unicode字符串与os.walk命令返回的Unicode结果时出现UnicodeWarning
我在用Python 2.7做一个文件遍历,使用的文件可以在这个链接找到:http://www.2shared.com/file/biSx7NI-/comer.html。然后我想把遍历的结果和一个数组进行比较。在实际的程序中,这个数组不会提前定义好。我想用的代码如下:
# -*- coding: utf-8 -*-
import os.path
group = ['comer.txt', 'coma.txt', 'comamos.txt', 'coman.txt', 'comas.txt', 'come.txt', 'comed.txt', 'comemos.txt', 'comen.txt', 'comeremos.txt', 'comer\xc3\xa1.txt', 'comer\xc3\xa1n.txt', 'comer\xc3\xa1s.txt', 'comer\xc3\xa9.txt', 'comer\xc3\xa9is.txt', 'comer\xc3\xada.txt', 'comer\xc3\xadais.txt', 'comer\xc3\xadamos.txt', 'comer\xc3\xadan.txt', 'comer\xc3\xadas.txt', 'comes.txt', 'comido.txt', 'comiendo.txt', 'comiera.txt', 'comierais.txt', 'comieran.txt', 'comieras.txt', 'comiere.txt', 'comiereis.txt', 'comieren.txt', 'comieres.txt', 'comieron.txt', 'comimos.txt', 'comiste.txt', 'comisteis.txt', 'comi\xc3\xa9ramos.txt', 'comi\xc3\xa9remos.txt', 'comi\xc3\xb3.txt', 'como.txt', 'com\xc3\xa1is.txt', 'com\xc3\xa9is.txt', 'com\xc3\xad.txt', 'com\xc3\xada.txt', 'com\xc3\xadais.txt', 'com\xc3\xadamos.txt', 'com\xc3\xadan.txt', 'com\xc3\xadas.txt', 'comer\xc3\xa1.txt', 'comer\xc3\xa9.txt', 'comer\xc3\xada.txt', 'comer\xc3\xadais.txt']
print "********what we have*********"
i=0
for f in group:
group[i] = os.path.basename(f)
group[i] = unicode(group[i], "utf-8")
print group[i]
i += 1
wantedResults = []
print "********what we want*********"
for(path, dirs, files) in os.walk("C:\corpus\zz-auto generated\spanish\comer"):
wantedResults.append(files)
for f in wantedResults[0]:
print f
print "********problems*********"
for resultWanted in wantedResults[0]:
if resultWanted not in group:
print "did not match our wanted results: " + resultWanted
for result in group:
if result not in wantedResults[0]:
print "extra file: " + result
但是我遇到了这个错误:
警告(来自警告模块): 文件 "C:\Users***\Desktop\osWalkTest.py",第26行 如果结果不在想要的结果[0]中: UnicodeWarning: Unicode相等比较失败,无法将两个参数转换为Unicode - >被解释为不相等
我真的需要一些帮助,让预定义的数组和os.walk得到的数组能够正确比较。我在谷歌上查过这个问题,也尝试了很多编码和解码的组合,但似乎都没有效果。谢谢。
1 个回答
1
你试过这样做吗?注意字符串前面的'u',它会把字符串变成Unicode格式:
for(path, dirs, files) in os.walk(u"C:/corpus/zz-auto generated/spanish/comer"):
(要注意,在字符串中使用反斜杠不是个好主意,不管它是不是Unicode格式。)