本節大綱:html
1.模塊node
1.1定義:用來從邏輯上組織python代碼(變量,函數,類,邏輯:實現一個功能),本質就是.py結尾的python文件(文件名:test.py)python
注:包的定語:本質就是一個目錄(必須帶一個_init_.py文件)。用來從邏輯上組織模塊。git
1.2.導入方法:正則表達式
import module_test算法
import module_test,module_test1,module_test2shell
from module_test import *(這個方法可忽略)json
from module_test import m1,m2,m3bash
from module_test import logger as logger_alex數據結構
1.3impot本質(路徑搜索和搜索路徑)
導入模塊的本質就是把python文件解釋一遍
import module_test---->imodule_test。py------>imodule_test.py的路徑---->sys.path(搜索路徑)
導入包的本質就是執行該包下的_init_.py文件
1.4導入優化
rom module_test import m1
1.5模塊的分類
a.標準庫
b.開源模塊
c.自定義模塊
標準庫:
2.time與datetime
4 import time 5
7 # print(time.clock()) #返回處理器時間,3.3開始已廢棄 , 改爲了time.process_time()測量處理器運算時間,不包括sleep時間,不穩定,mac上測不出來
8 # print(time.altzone) #返回與utc時間的時間差,以秒計算\
9 # print(time.asctime()) #返回時間格式"Fri Aug 19 11:14:16 2016",
10 # print(time.localtime()) #返回本地時間 的struct time對象格式
11 # print(time.gmtime(time.time()-800000)) #返回utc時間的struc時間對象格式
13 # print(time.asctime(time.localtime())) #返回時間格式"Fri Aug 19 11:14:16 2016",
14 #print(time.ctime()) #返回Fri Aug 19 12:38:29 2016 格式, 同上
18 # 日期字符串 轉成 時間戳
19 # string_2_struct = time.strptime("2016/05/22","%Y/%m/%d") #將 日期字符串 轉成 struct時間對象格式
20 # print(string_2_struct)
21 # #
22 # struct_2_stamp = time.mktime(string_2_struct) #將struct時間對象轉成時間戳
23 # print(struct_2_stamp)
27 #將時間戳轉爲字符串格式
28 # print(time.gmtime(time.time()-86640)) #將utc時間戳轉換成struct_time格式
29 # print(time.strftime("%Y-%m-%d %H:%M:%S",time.gmtime()) ) #將utc struct_time格式轉成指定的字符串格式
3.random模塊
import random
print
random.random()
print
random.randint(
1
,
2
)
print
random.randrange(
1
,
10
)
import
random
checkcode
=
''
for
i
in
range
(
4
):
current
=
random.randrange(
0
,
4
)
if
current !
=
i:
temp
=
chr
(random.randint(
65
,
90
))
else
:
temp
=
random.randint(
0
,
9
)
checkcode
+
=
str
(temp)
print
checkcode
os.getcwd() 獲取當前工做目錄,即當前python腳本工做的目錄路徑
os.chdir(
"dirname"
) 改變當前腳本工做目錄;至關於shell下cd
os.curdir 返回當前目錄: (
'.'
)
os.pardir 獲取當前目錄的父目錄字符串名:(
'..'
)
os.makedirs(
'dirname1/dirname2'
) 可生成多層遞歸目錄
os.removedirs(
'dirname1'
) 若目錄爲空,則刪除,並遞歸到上一級目錄,如若也爲空,則刪除,依此類推
os.mkdir(
'dirname'
) 生成單級目錄;至關於shell中mkdir dirname
os.rmdir(
'dirname'
) 刪除單級空目錄,若目錄不爲空則沒法刪除,報錯;至關於shell中rmdir dirname
os.listdir(
'dirname'
) 列出指定目錄下的全部文件和子目錄,包括隱藏文件,並以列表方式打印
os.remove() 刪除一個文件
os.rename(
"oldname"
,
"newname"
) 重命名文件
/
目錄
os.stat(
'path/filename'
) 獲取文件
/
目錄信息
os.sep 輸出操做系統特定的路徑分隔符,win下爲
"\\",Linux下爲"
/
"
os.linesep 輸出當前平臺使用的行終止符,win下爲
"\t\n"
,Linux下爲
"\n"
os.pathsep 輸出用於分割文件路徑的字符串
os.name 輸出字符串指示當前使用平臺。win
-
>
'nt'
; Linux
-
>
'posix'
os.system(
"bash command"
) 運行shell命令,直接顯示
os.environ 獲取系統環境變量
os.path.abspath(path) 返回path規範化的絕對路徑
os.path.split(path) 將path分割成目錄和文件名二元組返回
os.path.dirname(path) 返回path的目錄。其實就是os.path.split(path)的第一個元素
os.path.basename(path) 返回path最後的文件名。如何path以/或\結尾,那麼就會返回空值。即os.path.split(path)的第二個元素
os.path.exists(path) 若是path存在,返回
True
;若是path不存在,返回
False
os.path.isabs(path) 若是path是絕對路徑,返回
True
os.path.isfile(path) 若是path是一個存在的文件,返回
True
。不然返回
False
os.path.isdir(path) 若是path是一個存在的目錄,則返回
True
。不然返回
False
os.path.join(path1[, path2[, ...]]) 將多個路徑組合後返回,第一個絕對路徑以前的參數將被忽略
os.path.getatime(path) 返回path所指向的文件或者目錄的最後存取時間
os.path.getmtime(path) 返回path所指向的文件或者目錄的最後修改時間
sys.argv 命令行參數
List
,第一個元素是程序自己路徑
sys.exit(n) 退出程序,正常退出時exit(
0
)
sys.version 獲取Python解釋程序的版本信息
sys.maxint 最大的
Int
值
sys.path 返回模塊的搜索路徑,初始化時使用PYTHONPATH環境變量的值
sys.platform 返回操做系統平臺名稱
sys.stdout.write(
'please:'
)
val
=
sys.stdin.readline()[:
-
1
]
用於序列化的兩個模塊
Json模塊提供了四個功能:dumps、dump、loads、load
pickle模塊提供了四個功能:dumps、dump、loads、load
8.xml處理模塊
xml是實現不一樣語言或程序之間進行數據交換的協議,跟json差很少,但json使用起來更簡單,不過,古時候,在json還沒誕生的黑暗年代,你們只能選擇用xml呀,至今不少傳統公司如金融行業的不少系統的接口還主要是xml。
xml的格式以下,就是經過<>節點來區別數據結構的:
import
xml.etree.ElementTree as ET
tree
=
ET.parse(
"xmltest.xml"
)
root
=
tree.getroot()
print
(root.tag)
#遍歷xml文檔
for
child
in
root:
print
(child.tag, child.attrib)
for
i
in
child:
print
(i.tag,i.text)
#只遍歷year 節點
for
node
in
root.
iter
(
'year'
):
print
(node.tag,node.text)
import
xml.etree.ElementTree as ET
tree
=
ET.parse(
"xmltest.xml"
)
root
=
tree.getroot()
#修改
for
node
in
root.
iter
(
'year'
):
new_year
=
int
(node.text)
+
1
node.text
=
str
(new_year)
node.
set
(
"updated"
,
"yes"
)
tree.write(
"xmltest.xml"
)
#刪除node
for
country
in
root.findall(
'country'
):
rank
=
int
(country.find(
'rank'
).text)
if
rank >
50
:
root.remove(country)
tree.write(
'output.xml'
)
9.hashlib模塊
用於加密相關的操做,3.x裏代替了md5模塊和sha模塊,主要提供 SHA1, SHA224, SHA256, SHA384, SHA512 ,MD5 算法
import
hashlib
m
=
hashlib.md5()
m.update(b
"Hello"
)
m.update(b
"It's me"
)
print
(m.digest())
m.update(b
"It's been a long time since last time we ..."
)
print
(m.digest())
#2進制格式hash
print
(
len
(m.hexdigest()))
#16進制格式hash
'''
def digest(self, *args, **kwargs): # real signature unknown
""" Return the digest value as a string of binary data. """
pass
def hexdigest(self, *args, **kwargs): # real signature unknown
""" Return the digest value as a string of hexadecimal digits. """
pass
'''
import
hashlib
# ######## md5 ########
hash
=
hashlib.md5()
hash
.update(
'admin'
)
print
(
hash
.hexdigest())
# ######## sha1 ########
hash
=
hashlib.sha1()
hash
.update(
'admin'
)
print
(
hash
.hexdigest())
# ######## sha256 ########
hash
=
hashlib.sha256()
hash
.update(
'admin'
)
print
(
hash
.hexdigest())
# ######## sha384 ########
hash
=
hashlib.sha384()
hash
.update(
'admin'
)
print
(
hash
.hexdigest())
# ######## sha512 ########
hash
=
hashlib.sha512()
hash
.update(
'admin'
)
print
(
hash
.hexdigest())
'.'
默認匹配除\n以外的任意一個字符,若指定flag DOTALL,則匹配任意字符,包括換行
'^'
匹配字符開頭,若指定flags MULTILINE,這種也能夠匹配上(r
"^a"
,
"\nabc\neee"
,flags
=
re.MULTILINE)
'$'
匹配字符結尾,或e.search(
"foo$"
,
"bfoo\nsdfsf"
,flags
=
re.MULTILINE).group()也能夠
'*'
匹配
*
號前的字符
0
次或屢次,re.findall(
"ab*"
,
"cabb3abcbbac"
) 結果爲[
'abb'
,
'ab'
,
'a'
]
'+'
匹配前一個字符
1
次或屢次,re.findall(
"ab+"
,
"ab+cd+abb+bba"
) 結果[
'ab'
,
'abb'
]
'?'
匹配前一個字符
1
次或
0
次
'{m}'
匹配前一個字符m次
'{n,m}'
匹配前一個字符n到m次,re.findall(
"ab{1,3}"
,
"abb abc abbcbbb"
) 結果
'abb'
,
'ab'
,
'abb'
]
'|'
匹配|左或|右的字符,re.search(
"abc|ABC"
,
"ABCBabcCD"
).group() 結果
'ABC'
'(...)'
分組匹配,re.search(
"(abc){2}a(123|456)c"
,
"abcabca456c"
).group() 結果 abcabca456c
'\A'
只從字符開頭匹配,re.search(
"\Aabc"
,
"alexabc"
) 是匹配不到的
'\Z'
匹配字符結尾,同$
'\d'
匹配數字
0
-
9
'\D'
匹配非數字
'\w'
匹配[A
-
Za
-
z0
-
9
]
'\W'
匹配非[A
-
Za
-
z0
-
9
]
's'
匹配空白字符、\t、\n、\r , re.search(
"\s+"
,
"ab\tc1\n3"
).group() 結果
'\t'
'(?P<name>...)'
分組匹配 re.search(
"(?P<province>[0-9]{4})(?P<city>[0-9]{2})(?P<birthday>[0-9]{4})"
,
"371481199306143242"
).groupdict(
"city"
) 結果{
'province'
:
'3714'
,
'city'
:
'81'
,
'birthday'
:
'1993'
}
re.match 從頭開始匹配
re.search 匹配包含
re.findall 把全部匹配到的字符放到以列表中的元素返回
re.splitall 以匹配到的字符當作列表分隔符
re.sub 匹配字符並替換
re.I(re.IGNORECASE): 忽略大小寫(括號內是完整寫法,下同)
M(MULTILINE): 多行模式,改變
'^'
和
'$'
的行爲(參見上圖)
S(DOTALL): 點任意匹配模式,改變
'.'
的行爲
開發一個簡單的python計算器