"wordslist"的单词和我正在搜索的文本都是西里尔字母。文本以UTF-8编码(如Notepad++中设置的)。我需要Python来匹配文本中的一个单词,并获取单词后面的所有内容,直到句号后跟新行。
编辑
with open('C:....txt', 'rb') as f:
wordslist = []
for line in f:
wordslist.append(line)
wordslist = map(str.strip, wordslist)
/编辑
for i in wordslist:
print i #so far, so good, I get Cyrillic
wantedtext = re.findall(i+".*.rn", open('C:....txt', 'rb').read())
wantedtext = str(wantedtext)
print wantedtext
"Wantedtext"显示并保存为"\xd0\xb2"(等)。
我尝试了什么:
这个问题不同,因为没有变量:将字节转换为python字符串。此外,所选答案的解决方案
wantedtext.decode('utf-8')
没有起作用,结果是一样的。这里的解决方案也无济于事。
编辑:修订代码,返回"[]"。
with io.open('C:....txt', 'r', encoding='utf-8') as f:
wordslist = f.read().splitlines()
for i in wordslist:
print i
with io.open('C:....txt', 'r', encoding='utf-8') as my_file:
my_file_test = my_file.read()
print my_file_test #works, prints cyrillic characters, but...
wantedtext = re.findall(i+".*.rn", my_file_test)
wantedtext = str(wantedtext)
print wantedtext #returns []
(在下面的注释后添加:如果您从正则表达式中删除\r,则此代码有效。)
仅Python 2.x
您的find
可能不起作用,因为您混合了str和Unicodes str,或者str包含不同的编码。如果您不知道Unicode str和str之间的区别,请参阅:https://stackoverflow.com/a/35444608/1554386
除非你知道自己在做什么,否则不要启动decoding
。这不是巫毒:)
您需要先将所有文本转换为Unicode对象。
- 将您的阅读分成单独的一行-阅读起来更容易
-
解码您的文本文件。使用支持Python 3解码的
io.open()
。我假设你的文本文件是UTF-8(如果不是,我们很快就会发现):with io.open('C:....txt', 'r', encoding='utf-8') as my_file: my_file_test = my_file.read()
my_file_test
现在是一个Unicode str -
现在你可以做:
# finds lines beginning with i, ending in . regex = u'^{i}*?.$'.format(i=i) wantedtext = re.findall(regex, my_file_test, re.M)
-
看看
wordslist
。你没有说你对它做了什么,但你需要确保它也是一个Unicode str。如果从文件中读取,请使用与上面相同的io.open
。
编辑:
对于wordslist
,您可以解码文件并将其读取到列表中,同时一次性删除换行符:
with io.open('C:....txt', 'r', encoding='utf-8') as f:
wordslist = f.read().splitlines()