本文目錄一覽:
- 1、緊急求助,python中的字典使用漢字作為key,訪問出錯
- 2、python 根據gb2312區位碼查找漢字
- 3、如何查找Python中的關鍵字
- 4、python 字典的問題?
- 5、python 無法顯示漢字
緊急求助,python中的字典使用漢字作為key,訪問出錯
這個是編碼的問題,python中漢字是能作為key的,你使用同一種編碼, 你看這不是好好的么!盡量不要用漢字作為key
python 根據gb2312區位碼查找漢字
你給的問題不是很詳細,所以我只能給你舉個簡單的例子,如下:
首先要使得腳本的漢字使用gb2312編碼,然後在字元串中進行搜索,腳本如下:
# -*- coding: gb2312 -*-
findStr=’哈哈我不在家’
print findStr.find(‘在’)
如何查找Python中的關鍵字
1、用python這麼久就沒遇到過需要查找其關鍵字的時候,就那麼點關鍵字看幾遍後,基本都不會忘啦。而且寫程序時,不管你用的是vim、gedit還是pycharm,遇到關鍵字都會變顏色提醒的呀。
2、交互模式下,試過可行的:
import __builtin__
dir(__builtin__)
help(__builtin__)
python 字典的問題?
題主你好,
寫在前面: 我先給題主舉個例子, 我先定義一個字典:
dict03 = {1:3, 5:7}
可以看出上面這個字典有兩個元素, 此時我們使用dict03.values()得到的結果為:
dict_values([3,7])
從上面這個結果可以看出, 字典的values方法,會將字典中的所有鍵值對的值生成一個列表, 作為dict_values()參數,並返回.
—–
上面沒有講到重點,只是作了一個引, 下面看到底問題出在哪了.
題主定義的dict03={0:[1,3,5,7]}, 這個字典, 其實只有一個鍵值對, 鍵是整數0,值是列表[1,3,5,7], 所以此時dict03.value()返回的值為 dict_values([[1,3,5,7]]), 重點就在這裡, 注意,返回的是:
dict_values( [[ 1,3,5,7 ]] )
而不是
dict_values( [ 1,3,5,7 ] )
拋開前面這個dict_values, 也就是返回的是:
[[1,3,5,7]] 而不是 [1,3,5,7]
前者是含有一個元素的列表, 只不過這個元素本身也是一個列表;
後者是含有4個元素的列表, 每個元素都是整型數字;
而 x in y 這種形式中, 是看x是否存在於y中,
拿題主的代碼來說, 其實 i in dict03.values() 翻譯過來是:
5 in [[1,3,5,7]], 因為[[1,3,5,7]]這個列表就一個元素,為[1,3,5,7],所以5並不在[[1,3,5,7]]中,
如果翻譯過來是:
5 in [1,3,5,7],那麼我們得到的結果肯定是True, 因為[1,3,5,7]中有4個元素,而5恰在其中.
所以解決方法也就有了, 想辦法去掉[[1,3,5,7]]最外層的[].
代碼及測試截圖如下:
上圖中, 第一個紅框是將dict_values([[1,3,5,7]])轉換成 [[1,3,5,7]];
第二個紅框是將[[1,3,5,7]]轉換成[1,3,5,7];
此時最後一句print(5 in [1,3,5,7]) 也就得到了我們想要的結果True了.
—–
希望可以幫到題主, 歡迎追問.
python 無法顯示漢字
實際上,這段代碼所出現的問題和cPickle模塊沒什麼關係。而是Python 2顯示中文「亂碼」的問題。
Python 2中,str是8-bit string sequence(有點像Python 3中的bytes)。而Python 3中str就相當於Python 2中的unicode。
所以,
a = ‘上海’
repr(a)
“‘\\xc9\\xcf\\xba\\xa3′”
a # a中存儲的8位元組轉義字元序列
‘\xc9\xcf\xba\xa3’
print a # 輸出a,在此過程中,會對a進行解碼操作,然後輸出
上海
上例中,可以看到:
a = ‘上海’
a中實際存儲的是:
‘\xc9\xcf\xba\xa3’
這樣一個位元組序列。它實際上是對’上海’這個unicode字元串按gbk/cp936/gb18030編碼得到的(和簡體中文Windows操作系統的默認編碼有關)。
給你推薦一篇博客:
下面是我寫的示例:
# _*_ coding: gbk _*_
# Test with Python 2.7, Python 3.3 on Windows XP
try:
import cPickle as p
except:
import pickle as p
address_file = ‘address.txt’
class Human(object):
def __init__(self, address):
self.address = address
def txl(self):
af = {‘address’: self.address}
print(af)
print(af[‘address’])
f = open(address_file, ‘wb’) # In python 3, use binary mode.
# In python 2.7, default protocol is 0.
# However, it is 3 in python 3.3.
p.dump(af, f, 0)
f.close()
address = ‘上海’
print(address)
dq = Human(address)
dq.txl()
af = open(address_file, ‘rb’) #
print(p.load(af))
af.close()
“””
Output
—————————————-
Python 2.7.6:
1. # -*- coding: utf-8 -*-
涓婃搗
{‘address’: ‘\xe4\xb8\x8a\xe6\xb5\xb7’}
涓婃搗
{‘address’: ‘\xe4\xb8\x8a\xe6\xb5\xb7’}
2. # -*- coding: gbk -*- or # _*_ coding: cp936 _*_
上海
{‘address’: ‘\xc9\xcf\xba\xa3’}
上海
{‘address’: ‘\xc9\xcf\xba\xa3’}
Python 3.3.3:
上海
{‘address’: ‘上海’}
上海
{‘address’: ‘上海’}
——————————————
In Python 3.3.3:
‘上海’.encode(‘utf-8’)
b’\xe4\xb8\x8a\xe6\xb5\xb7′
_.decode(‘cp936’)
‘涓婃搗’
“””
從這個示例中可以看出,雖然把字典整個print出來不能正常解析address中的內容:
addr = {‘addr’: ‘上海’}
addr
{‘addr’: ‘\xc9\xcf\xba\xa3’}
print addr
{‘addr’: ‘\xc9\xcf\xba\xa3’}
但是單獨列印:
addr[‘addr’]
‘\xc9\xcf\xba\xa3’
print addr[‘addr’] # print 輸出之前隱含了編碼解碼操作,但為何列印整個字典時輸出不正常尚待研究
上海
一切OK。
所以,如果真的用Python 2的話,對於該問題可以考慮手工負責編碼、解碼操作(如果使用print單獨列印地址信息,就不用這麼麻煩了,因為這些事它幫你做了)。用Python3,就沒這麼多問題了。
最後補充一點,pickle模塊只是提供了一種序列化Python對象的方法。所以序列化生成的文件中和想像的不一樣也不足為奇。正如自由de王國所說的,只要序列化後還能夠反序列化成功就行了。實際上,當protocol不是0的情況下,序列化生成的文件是二進位格式的,根本沒法用記事本直接看。
原創文章,作者:小藍,如若轉載,請註明出處:https://www.506064.com/zh-tw/n/240141.html