我有两个包含日语单词和字符信息的python词典:
kanjiDic:包含汉字(单日语字符),键:汉字,值:字典及其相关信息
现在我想遍历vocabDic中每个单词的每个字符,并在汉字字典中查找这个字符.我的目标是创建一个csv文件,然后我可以将其作为词汇表和汉字的连接表导入数据库.
我的Python版本是2.6
我的代码如下:
kanjiVocabJoinWriter = csv.writer(open('kanjiVocabJoin.csv', 'wb'), delimiter=',', quotechar='|', quoting=csv.QUOTE_MINIMAL)
kanjiVocabJoinCount = 1
#loop through dictionary
for key, val in vocabDic.iteritems():
if val['lang'] is 'jpn': # only check japanese words
vocab = val['text']
print vocab
# loop through vocab string
for v in vocab:
test = kanjiDic.get(v)
print v
print test
if test is not None:
print str(kanjiVocabJoinCount)+','+str(test['id'])+','+str(val['id'])
kanjiVocabJoinWriter([str(kanjiVocabJoinCount),str(test['id']),str(val['id'])])
kanjiVocabJoinCount = kanjiVocabJoinCount+1
Run Code Online (Sandbox Code Playgroud)如果我将变量打印到命令行,我得到:
vocab:works,print in japanese
v(for循环中的一个字符): test
(字符在kanjiDic中查找):None
对我来说似乎是for循环使编码混乱.
我尝试了各种功能(解码,编码..)但到目前为止没有运气.
关于如何让这个工作的任何想法?
非常感谢帮助.
unu*_*tbu 11
根据您对问题的描述,它听起来像是vocab一个编码str对象,而不是一个unicode对象.
具体来说,假设vocab等于u'?????'编码utf-8:
In [42]: v=u'?????'
In [43]: vocab=v.encode('utf-8') # val['text']
Out[43]: '\xe5\x82\xb5\xe5\x8b\x99\xe3\x81\xae\xe5\xa4\xa9\xe4\xba\x95'
Run Code Online (Sandbox Code Playgroud)
如果您遍历所有的编码str对象,您一次得到一个字节:\xe5,然后\x82,然后\xb5,等.
但是,如果循环遍历unicode对象,则一次只能获得一个unicode字符:
In [45]: for v in u'?????':
....: print(v)
?
?
?
?
?
Run Code Online (Sandbox Code Playgroud)
请注意,编码的第一个unicode字符utf-8是3个字节:
In [49]: u'?'.encode('utf-8')
Out[49]: '\xe5\x82\xb5'
Run Code Online (Sandbox Code Playgroud)
这就是循环字节,一次打印一个字节,(例如print \xe5)无法打印可识别字符的原因.
所以看起来你需要解码你的str对象并使用unicode对象.您没有提到您正在使用的str对象编码.如果是utf-8,那么你就像这样解码它:
vocab=val['text'].decode('utf-8')
Run Code Online (Sandbox Code Playgroud)
如果您不确定编码val['text']是什么,请发布输出
print(repr(vocab))
Run Code Online (Sandbox Code Playgroud)
也许我们可以猜测编码.
| 归档时间: |
|
| 查看次数: |
6362 次 |
| 最近记录: |