我有这个脚本,它读取大量用瑞典语编写的文本文件(通常使用åäö字母)。如果我循环遍历d
和dictionary[]
,它会从字典中打印出一切。但是,正则表达式(来自添加了u'.*'
的原始输入)在正确返回utf-8时失败。
# -*- coding: utf8 -*-
from os import listdir
import re
import codecs
import sys
print "Välkommen till SOU-sök!"
search_word = raw_input("Ange sökord: ")
dictionary = {}
for filename in listdir("20tal"):
with open("20tal/" + filename) as currentfile:
text = currentfile.read()
dictionary[filename] = text
for d in dictionary:
result = re.findall(search_word + u'.*', dictionary[d], re.UNICODE)
if len(result) > 0:
print "Filnament är:\n %s \noch sökresultatet är:\n %s" % (d, result)
编辑:输出如下:
如果我输入:
katt
我得到以下输出:
Filnament är: Betänkande och förslag angående vissa ekonomiska spörsmål berörande enskilda järnvägar - SOU 1929:2.txt
och sökresultatet är:
['katter, r\xc3\xa4ntor m. m.', 'katter m- m., men exklusive r \xc3\xa4 nor m.', 'kattemedel subventionerar', av totalkostnaderna, ofta \xe2\x80\x94 med eller utan', 'kattas den nuvarande bilparkens kapitalv\xc3\xa4rde till 500 milj.
此处,文件名d
已正确打印,但不是re.findall
答案 0 :(得分:1)
在Python 2.x
中,unicode列表项通常会输出转义,除非你遍历每个或加入它们;也许尝试这样的事情:
result = ', '.join(result)
if len(result) > 0:
print ( u"Filnament är:\n %s \noch sökresultatet är:\n %s" % (d, result.decode('utf-8')))
<强>输入强>:
katt
<强>结果强>:
katter, räntor m. m. katter m- m., men exklusive r ä nor m. kattemedel subventionerar av totalkostnaderna, ofta — med eller utan kattas den nuvarande bilparkens kapitalvärde till 500 milj
答案 1 :(得分:0)
文件名normalized的方式是文件系统和操作系统相关的。您的特定正则表达式可能无法正确匹配规范化方法。因此,请remram:
考虑此解决方案import fnmatch
def myglob(pattern, directory=u'.'):
pattern = unicodedata.normalize('NFC', pattern)
results = []
enc = sys.getfilesystemencoding()
for name in os.listdir(directory):
if isinstance(name, bytes):
try:
name = name.decode(enc)
except UnicodeDecodeError:
# Filenames that are not proper unicode won't match any pattern
continue
if fnmatch.filter([unicodedata.normalize('NFC', name)], pattern):
results.append(name)
return results
我在这里遇到了类似的问题:Filesystem independent way of using glob.glob and regular expressions with unicode filenames in Python