4 30日讀書筆記 流暢的python

2021-09-20 10:28:47 字數 3675 閱讀 2958

大小寫摺疊

大小寫摺疊的意思實際上就是將所有的文字變成小寫之後,在進行轉換操作。具體的方法是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...