天天看點

python3.x 學習筆記 2一、解析二、字元串三、正規表達式

一、解析

【備注】主要講清單解析、字典解析和集合解析的概念。

1、處理檔案和目錄

a:python3自帶一個os子產品(代表作業系統operating system),os子產品包含非常多的函數用于擷取(和修改)本地目錄、檔案程序、環境變量等資訊。

b:os是python3自帶的,可以在任何地方導入。import os

c:擷取目前工作目錄:os.getcwd();

d:改變目前工作目錄:os.chdir();

2、處理檔案名和目錄名

a:os.path子產品包含了處理檔案名和目錄名的函數

b:os.path.join()函數從一個或者多個路徑片段中構造成一個路徑名。其可以接受任何數量的參數。

print(os.path.join(os.path.expanduser('~'),'diveintopython3', 'examples', 'humansize.py')) 

結果:c: \Users\pilgrim\diveintopython3\examples\humansize.py

c:os.path.split()分割一個完整的路徑,并傳回目錄和檔案名。

split()函數的傳回值被賦給一個二進制組,每個變量獲得元組中對應元素的值。

例如:os.path.split(pathname)----》('/Usrs/p/d/examples', 'hum.py')

(dirname, filename) = os.path.split(pathname)

其中:dirname=‘/Usrs/p/d/examples' ; filename='hum.py'

d:os.path.splitext()用于分割檔案名并傳回檔案名和其擴充名。

例如:(shortname, extension) = os.path.splitext(filename)

shortname=’hum‘;   extension=’.py‘【包含前面的點】

3、羅列目錄内容

a:glob子產品;可以通過程式設計的方法擷取一個目錄的内容。

b:用法:import glob引入 glob.glob(參數)調用

4、擷取檔案元資訊

a:檔案的元資訊:檔案建立時間、修改時間、檔案大小等資訊

b:os.stat(’參數‘)函數傳回一個或者多種檔案的元資訊的對象。參數接收檔案名。

例如:metadata = os.stat('feed.xml') 

metadata.st_mtime:其中st_mtime擷取檔案最後修改時間。

metadata.st_size :其中st_size擷取檔案的大小。

5、構造絕對路徑

a:os.path.realpath()

6、清單解析

a:定義:通過對清單中每一個元素【elem】應用一個函數的方法來将一個清單映射到另一個清單。

例如:a_list = [elem * 2 for elem in a_list]

b:清單解析也可以過濾清單,生成比原清單短的清單。---如加入:if判斷條件

例如:[f for f in glob.glob('*.py') ifos.stat(f).st_size>6000]

7、字典解析

a:字典解析和清單解析一樣,隻不過生成的是字典。
b:可以通過字典解析交換字典的鍵和值:
例如:>>> a_dict = {'a': 1, 'b': 2, 'c': 3}

  >>> {value:key for key, value in a_dict.items()}  //items()函數傳回字典的所有鍵和值

{1: 'a', 2: 'b', 3: 'c'}

8、集合解析

二、字元串

1、字元串操作:

a:s.splitlines();對字元串按行進行分行輸出,産生一個字元串清單; b:s.lower():将字元串變為小寫;對應的有s.upper() c:s.count() :對指定的字元串進行計數 d:将一個有鍵值對形式的清單轉換成字典
例如:>>>query = 'key1=value1&key2=value2'
   >>> a_list = query.split('&') //【split()之後我們得到的是一個清單】    >>>a_list    ['key1=value1', 'key2=value2']   >>> a_list_of_lists = [v.split('=', 1)for v in a_list]    >>> a_list_of_lists   [ ['key1','value1'], ['key2', 'value2'] ]   >>> a_dict = dict(a_list_of_lists) //實作清單到字典的轉換  {'key1 : value1', 'key2 : value2'}

2、字元串切片:

a:類似清單的切片,可以通過制定兩個索引值來獲得字元串的一個slice;如:>>> a_string[18:]

b:bytes對象和string對象互相轉換方法:decode()-----bytes轉換成字元串、encode() ----字元串轉bytes

如:a_string = by.decode('ascii')

三、正規表達式

1、正規表達式的相關功能在re子產品中

a:引入正規表達式:import re

b:re.sub( )函數可以做字元串的替換。^比對字元串的開始;$比對字元串的結束。

例如:

>>> s = '100 NORTH BROAD ROAD'  //僅替換最後一個ROAD

>>> import re

>>> re.sub('ROAD$', 'RD.',s) //$表示以ROAD結束的詞

c:在字元串前加一個字元‘r’---表示字元串中沒有任何字元需要轉義。

d:‘\b’ 用此包含的字元,表示他必須是一個獨立的詞;不管在字元串的什麼位置

例如:

>>> s = '100 BROAD ROAD APT. 3' //【我們僅希望替換獨立單詞ROAD】

>>> re.sub(r'\bROAD\b', 'RD.', s) //r開頭表示字元串沒有轉義,\b包圍字元--表示此字元必須為單獨的一個詞

'100 BROAD RD. APT 3'  //結果

e:re子產品的基本方法時search()函數。它使用正規表達式來比對字元串( M)。如果成功比對, search()傳回一個比對對象。如果沒有比對到,search()就傳回None.。

例如:

>>>import re

>>>pattern='^M?M?M?$'

>>>re.search(pattern, 'MM')

f:使用文法{n, m}

例如:

>>>pattern = '^M{0,3}$'

表示比對字元串開始,然後是任意的0到3個M字元。

2、松散正規表達式

a:其需要傳遞一個re.VERBOSE參數。表示用的是松散正規表達式

b:\d表示任意的數字(0-9);\D表示除數字外的所有字元;\d+;其中+表示一個或者多個;\d*:其中*表示又或者沒有

如:(\d{3})--放到圓括号裡表示一定要比對3個數字。

(\d+):表示一個或者多個數字;其中+表示一個或者多個

3、常用正規表達式的字元含義

a:^ 比對字元串開始位置

b:$ 比對字元串結束位置

c:\b 比對一個單詞邊界;結束和開始

d:\d 比對一個數字

e:\D 比對一個任意的非數字字元

f:x? 比對可選的 x 字元。換句話說,就是 0 個或者 1 個 x 字元。 【?可以認為是x的個數】

g:x* 比對 0 個或更多的 x。

h:x+ 比對 1 個或者更多 x。【至少一個】

i:x{n,m} 比對 n 到 m 個 x,至少 n 個,不能超過 m 個

k:(a|b|c) 比對單獨的任意一個 a 或者 b 或者 c。

l:(x) 這是一個組【括号括起來,表示一個組】,它會記憶它比對到的字元串。你可以用re.search 傳回的比對對象的 groups()函數來擷取到比對的值

k:中括号[ ]表示比對這些字元串之一,且隻能比對其中一個。

例如:re.search('[sxz]$', noun) 表示noun是否以s、x或者z結尾