with open('result.txt', 'r') as f:
data = f.read()
print 'What type is my data:'
print type(data)
for i in data:
print "what is i:"
print i
print "what type is i"
print type(i)
print i.encode('utf-8')
我有带字符串的文件,我正在尝试读取文件并按空格拆分单词并将它们保存到列表中。下面是我的代码:
有人请帮忙!
更新:
我将在这里详细描述我正在尝试做的事情,以便为人们提供更多背景信息:我正在尝试做的目标是:1. 将中文文本分解成句子,并检测基本的结尾标点符号。 2. 取每个句子,使用工具jieba将字符分词成有意义的词。例如,两个汉字“学,生”将组合在一起产生一个标记“学生”(意思是学生)。 3. 将句子中的所有标记保存到列表中。因此最终列表将包含多个列表,因为一个段落中有多个句子。
# coding: utf-8
#encoding=utf-8
import jieba
cutlist = "。!?".decode('utf-8')
test = "【明報專訊】「吉野家」and Peter from US因被誤傳採用日本福島米而要報警澄清,並自爆用內地黑龍江米,日本料理食材來源惹關注。本報以顧客身分向6間日式食店查詢白米產地,其中出售逾200元日式豬扒飯套餐的「勝博殿日式炸豬排」也選用中國大連米,誤以為該店用日本米的食客稱「要諗吓會否再幫襯」,亦有食客稱「好食就得」;壽司店「板長」店員稱採用香港米,公關其後澄清來源地是澳洲,即與平價壽司店「爭鮮」一樣。有飲食界人士稱,雖然日本米較貴、品質較佳,但內地米品質亦有保證。"
#FindToken check whether the character has the ending punctuation
def FindToken(cutlist, char):
if char in cutlist:
return True
else:
return False
”’
cut 检查字符串列表中的每个项目,如果该项目不是结束标点符号,它将把它保存到一个名为 line 的临时列表中。当遇到结束标点时,它会将已收集在列表行中的完整句子保存到最终列表中。 “’
def cut(cutlist,test):
l = []
line = []
final = []
”’
检查字符串列表中的每个项目,如果该项目不是结尾的标点符号,它将把它保存到一个名为 line 的临时列表中。当遇到结束标点时,它会将列表行中收集的完整句子保存到最终列表中。 “’
for i in test:
if i == ' ':
line.append(i)
elif FindToken(cutlist,i):
line.append(i)
l.append(''.join(line))
line = []
else:
line.append(i)
temp = []
#This part iterate each complete sentence and then group characters according to its context.
for i in l:
#This is the function that break down a sentence of characters and group them into phrases
process = list(jieba.cut(i, cut_all=False))
#This is puting all the tokenized character phrases of a sentence into a list. Each sentence
#belong to one list.
for j in process:
temp.append(j.encode('utf-8'))
#temp.append(j)
print temp
final.append(temp)
temp = []
return final
cut(list(cutlist),list(test.decode('utf-8')))
这是我的问题,当我输出最终列表时,它给了我以下结果的列表:
[u'\u3010', u'\u660e\u5831', u'\u5c08\u8a0a', u'\u3011', u'\u300c', u'\u5409\u91ce\u5bb6', u'\u300d', u'and', u' ', u'Peter', u' ', u'from', u' ', u'US', u'\u56e0', u'\u88ab', u'\u8aa4\u50b3', u'\u63a1\u7528', u'\u65e5\u672c', u'\u798f\u5cf6', u'\u7c73', u'\u800c', u'\u8981', u'\u5831\u8b66', u'\u6f84\u6e05', u'\uff0c', u'\u4e26', u'\u81ea\u7206', u'\u7528\u5167', u'\u5730', u'\u9ed1\u9f8d', u'\u6c5f\u7c73', u'\uff0c', u'\u65e5\u672c\u6599\u7406', u'\u98df\u6750', u'\u4f86\u6e90', u'\u60f9', u'\u95dc\u6ce8', u'\u3002']
如何将 unicode 列表转换为普通字符串?
原文由 YAL 发布,翻译遵循 CC BY-SA 4.0 许可协议
让我给你一些提示:
decode()
。)split()
。for i in data
时,你是说你想遍历刚刚读取的文件的每个字节。循环的每次迭代都是一个字符。我不确定这是否是您想要的,因为这意味着您必须手动进行 UTF-8 解码(而不是使用decode()
,它必须对整个 UTF-8 字符串进行操作。 ).换句话说,这里有一行代码可以做到这一点:
如果这是家庭作业,请不要上交。你的老师会找你的。 ;-)
编辑:这是一个如何在 python 中编码和解码 unicode 字符的示例:
首先要注意的是 Python(嗯,至少 Python 2)在字符串常量上使用
u""
表示法(注意u
前缀)以表明它们是 Unicode。在 Python 3 中,字符串默认为 Unicode,但如果需要字节字符串,可以使用b""
。如您所见,Unicode 字符串由两个字节的字符组成。当你读取文件时,你会得到一个单字节字符的字符串(相当于你调用
.encode()
时得到的字符串。所以如果你有文件中的字节,你必须调用.decode()
将它们转换回 Unicode。然后你可以遍历每个字符。“按空格”拆分是每种语言所独有的,因为许多语言(例如中文和日语)不像大多数欧洲语言那样使用
' '
字符。我不知道如何在 Python 中做到这一点,但我确信有办法。