大小寫摺疊
大小寫摺疊的意思實際上就是將所有的文字變成小寫之後,在進行轉換操作。具體的方法是str.casefold()。
在操作unicode的時候最好使用str.casefold(),因為str.lower()方法支隊ascii即『a-z』有效。但是語言並不是只有英語哦哦。
去掉變音符號
有一種很粗暴的方式,是將上例中的"café"直接變成"cafe"。通常,我們去掉變音符號就是為了將拉丁文本變成ascii。但如果僅僅只是去掉重音符的話並不能把它們變成ascii字元。因此,我們應該先去分析下各個基字元,僅當字元在拉丁字元表中時才刪除附加的記號。
4.7
4.74.
7 unicode文字排序
對於字串來說,python在排序時,會去比較它們的碼位。可是當比較的是非ascii字元時,結果可能會有所不同。
>>
> fruits =
['caju'
,'cajá'
,'acai'
]>>
>
sorted
(fruits)
['acai'
,'caju'
,'cajá'
]
變音符號對結果有影響的情況比較少發生,只有兩個詞之間唯有變音符號不同時才有影響。此時,帶有變音符號的詞會排到常規詞的後面。使用locale.strxfrm函式做排序
>>
>
import locale
>>
> locale.setlocale(locale.lc_collate,
'pt_br.utf-8'
)'pt_br.utf-8'
>>
> fruits =
['caju'
,'cajá'
,'acai'
]>>
> s =
sorted
(fruits, key=locale.strxfrm)
>>
> s
['acai'
,'caju'
,'cajá'
]
該函式會將字串轉換成合適所在區域進行比較的形式。
使用unicode排序演算法排序
>>
>
import pyuca
>>
> coll = pyuca.collator(
)>>
> fruits =
['caju'
,'cajá'
,'acai'
]>>
> sorted_fruits =
sorted
(fruits, key=coll.sort_key)
>>
> sorted_fruits
['acai'
,'cajá'
,'caju'
]
pyuca庫
4.8
4.84.
8 unicode資料庫
unicode提供了乙個很完整的資料庫,包含許多格式化的文字檔案,不僅僅是碼位與字元名稱之間的對映,還有各個字元的元資料,以及字元之間的一些關係。
比如,unicode資料庫中記錄了字元是否可以列印,是不是字母,是不是數字,或者是不是其他的一些數值符號。
unicdedata模組中有幾個函式是用於獲取字元的元資料。如:unicodedata.name(),unicodedata.numeric(),以及字串的.isdecimal()等方法。
os模組中的字串和位元組序列
在os模組中,所有函式,檔名或者路徑名引數既能使用字串,又可以使用位元組序列。
>>
>
import os
>>
> os.listdir(
'.')
['music'
,'.vim'
,'.ds_store'
,'eassy.txt'
,'pinyin.txt'
,'.cfusertextencoding'
,'.python_history-02577.tmp'
,'.bashrc'
,'pictures'
,'desktop'
,'library'
,'.bash_sessions'
,'pycharmprojects'
,'public'
,'.pip'
,'movies'
,'.python_history-12733.tmp'
,'.trash'
,'.keras'
,'floats.bin'
,'documents'
,'.mysql_history'
,'.bash_profile'
,'downloads'
,'.python_history'
,'.gitconfig'
,'.bash_history'
,'.viminfo'
]>>
> os.listdir(b'.'
)[b'music'
, b'.vim'
, b'.ds_store'
, b'eassy.txt'
, b'pinyin.txt'
, b'.cfusertextencoding'
, b'.python_history-02577.tmp'
, b'.bashrc'
, b'pictures'
, b'desktop'
, b'library'
, b'.bash_sessions'
, b'pycharmprojects'
, b'public'
, b'.pip'
, b'movies'
, b'.python_history-12733.tmp'
, b'.trash'
, b'.keras'
, b'floats.bin'
, b'documents'
, b'.mysql_history'
, b'.bash_profile'
, b'downloads'
, b'.python_history'
, b'.gitconfig'
, b'.bash_history'
, b'.viminfo'
]
如果引數本身就是位元組序列,那麼返回的檔名也是位元組序列。
為了便於手動去處理字串或者位元組序列形式的檔名或者路徑名,os模組提供了特殊的編碼解碼的函式:
如果檔名為string型別,那麼使用sys.getfilesystemcoding()返回的編解碼器把filename編碼成位元組序列,否則會返回未經修改的filename的位元組序列。
如果檔名為string型別,那麼使用sys.getfilesystemcoding()返回的編解碼器把filename解碼成字串,否則會返回未經修改的filename的字串。
《流暢的Python》讀書筆記
第1章 python資料模型 通過實現特殊方法,自定義資料型別可以表現得和內建型別一樣 repr 方便除錯和記錄日誌,str 方便使用者看 序列資料型別特殊方法使用最多 第2章 序列構成的陣列 系列型別可分為 可變和不可變 扁平序列和容器序列 列表推導生成器表示式提供了靈活構建和初始化序列的方式 元...
流暢的python讀書筆記
1.雖然也可以用列表推導來初始化元組 陣列或其他序列型別,但是生成器表示式是更好的選擇。這是因為生成器表示式背後遵守了迭代器協議,可以逐個地產出元素,而不是先建立乙個完整的列表,然後再把這個列表傳遞到某個建構函式裡。前面那種方式顯然能夠節省記憶體。生成器表示式的語法跟列表推導差不多,只不過把方括號換...
《流暢的Python》讀書筆記(三)
country code my dict.setdefault key,使用 collections.defaultdict import collections index collections.defaultdict list index hunan changsha index defaul...