python中常用的模塊的總結


1、 模塊和包

a.定義:

模塊用來從邏輯上組織python代碼(變量,函數,類,邏輯:實現一個功能),本質就是.py結尾的python文件。(例如:文件名:test.py,對應的模塊名:test)

包:用來從邏輯上組織模塊的,本質就是一個目錄(必須帶有一個__init__.py的文件)

b.導入方法

import module_name

import module_1的本質:是將module_1解釋了一遍

也就是將module_1中的所有代碼復制給了module_1

from module_name1 import name

本質是將module_name1中的name變量放到當前程序中運行一遍

所以調用的時候直接print(name)就可以打印出name變量的值

代碼例子:自己寫的模塊,其他程序調用,如下所示:

模塊module_1.py代碼:

1 name = "dean"
2 def say_hello():
3 print("hello %s" %name)

調用模塊的python程序main代碼如下:(切記調用模塊的時候只需要import模塊名不需要加.py)

import module_1

   

#調用變量

print(module_1.name)

   

#調用模塊中的方法

module_1.say_hello()

這樣運行main程序后的結果如下:

1 D:\python35\python.exe D:/python培訓/s14/day5/module_test/main.py
2 dean
3 hello dean
4 
5 Process finished with exit code 0

import module_name1,module_name2

from module_name import *(這種方法不建議使用)

from module_name import logger as log(別名的方法)

c.導入模塊的本質就是把python文件解釋一遍

import  module_name---->module_name.py---->module_name.py的路徑---->sys.path

導入包的本質就是執行該包下面的__init__.py

關於導入包的一個代碼例子:

新建一個package_test包,並在該包下面建立一個test1.py的python程序,在package包的同級目錄建立一個p_test.py的程序

test1的代碼如下:

1 def test():
2     print("int the test1")

package_test包下的__init__.py的代碼如下:

1 #import test1 (理論上這樣就可以但是在pycharm下測試必須用下面from .import test1)
2 from . import  test1
3 print("in the init")

p_test的代碼如下:

1 import package_test   #執行__init__.py
2 package_test.test1.test()

這樣運行p_test的結果:

1 D:\python35\python.exe D:/python培訓/s14/day5/p_test.py
2 in the init
3 int the test1
4 
5 Process finished with exit code 0

從上述的例子中也可以看出:導入包的時候其實是執行包下的__init__.py程序,所以如果想要調用包下面的python程序需要在包下的__init__.py導入包下面的程序

2、模塊的分類

a.    標准庫

b.    開源模塊

c.    自動以模塊

3、時間模塊

time與datetime

python中常見的時間表示方法:

a. 時間戳

時間戳:從1970年1月1日00:00:00到現在為止一共的時間數(單位為秒)

>>> time.time()

1472016249.393169

>>> 

b. 格式化的時間字符串

c. struct_time(元組)

相互之間的轉換關系如下:

 

1)    time.localtime()將時間戳轉換為當前時間的元組

>>> time.localtime()

time.struct_time(tm_year=2016, tm_mon=8, tm_mday=24, tm_hour=13, tm_min=27, tm_sec=55, tm_wday=2, tm_yday=237, tm_isdst=0)

>>> 

 

2)    time.gmtime()將時間戳轉換為當前時間utc時間的元組

 

>>> time.gmtime()

time.struct_time(tm_year=2016, tm_mon=8, tm_mday=24, tm_hour=5, tm_min=35, tm_sec=43, tm_wday=2, tm_yday=237, tm_isdst=0)

>>> 

3)    time.mktime()可以將struct_time轉換成時間戳

>>> x = time.localtime()

>>> x

time.struct_time(tm_year=2016, tm_mon=8, tm_mday=24, tm_hour=13, tm_min=39, tm_sec=42, tm_wday=2, tm_yday=237, tm_isdst=0)

>>> time.mktime(x)

1472017182.0

>>> 

4)    將struct_time裝換成格式化的時間字符串

 

>>> x

time.struct_time(tm_year=2016, tm_mon=8, tm_mday=24, tm_hour=13, tm_min=39, tm_sec=42, tm_wday=2, tm_yday=237, tm_isdst=0)

>>> time.strftime("%Y-%m-%d %H:%M:%S",x)

'2016-08-24 13:39:42'

>>> 

 

5)    可以將格式化的時間字符串轉換為struct_time

>>> time.strptime("2016-08-24 14:05:32","%Y-%m-%d %H:%M:%S")

time.struct_time(tm_year=2016, tm_mon=8, tm_mday=24, tm_hour=14, tm_min=5, tm_sec=32, tm_wday=2, tm_yday=237, tm_isdst=-1)

>>> 

6)將struct_time轉換成Wed Aug 24 14:22:47 2016這種格式

>>> x

time.struct_time(tm_year=2016, tm_mon=8, tm_mday=24, tm_hour=14, tm_min=22, tm_sec=47, tm_wday=2, tm_yday=237, tm_isdst=0)

>>> time.asctime(x)

'Wed Aug 24 14:22:47 2016'

>>> 

 

7)將時間戳裝換成Wed Aug 24 14:22:47 2016格式

>>> x = time.time()

>>> x

1472019984.958831

>>> time.ctime(x)

'Wed Aug 24 14:26:24 2016'

>>> 

 

 1 %a    本地(locale)簡化星期名稱    
 2 %A    本地完整星期名稱    
 3 %b    本地簡化月份名稱    
 4 %B    本地完整月份名稱    
 5 %c    本地相應的日期和時間表示    
 6 %d    一個月中的第幾天(01 - 31 7 %H    一天中的第幾個小時(24小時制,00 - 23 8 %I    第幾個小時(12小時制,01 - 12 9 %j    一年中的第幾天(001 - 36610 %m    月份(01 - 1211 %M    分鍾數(00 - 5912 %p    本地am或者pm的相應符      
13 %S    秒(01 - 6114 %U    一年中的星期數。(00 - 53星期天是一個星期的開始。)第一個星期天之前的所有天數都放在第0周。        
15 %w    一個星期中的第幾天(0 - 6,0是星期天)     
16 %W    和%U基本相同,不同的是%W以星期一為一個星期的開始。    
17 %x    本地相應日期    
18 %X    本地相應時間    
19 %y    去掉世紀的年份(00 - 9920 %Y    完整的年份    
21 %Z    時區的名字(如果不存在為空字符)    
22 %%    ‘%’字符

datetime

當前時間:datetime.datetime.now()

1、    隨機模塊random

random.randint(1,3)則可以取出隨機1-3

random.randrange(1,3)隨機從范圍內所及

random.choice()傳遞的參數是序列包括字符串列表等

>>> random.choice("hello")

'l'

>>> random.choice("hello")

'o'

>>> random.choice("hello")

'e'

>>> 

>>> random.choice(["我","愛","你"])

'我'

>>> random.choice(["我","愛","你"])

'你'

>>> random.choice(["我","愛","你"])

'你'

>>> random.choice(["我","愛","你"])

'愛'

>>> 

random.sample()隨機從前面的序列取出兩位

>>> random.sample("hello",2)

['l', 'o']

>>> random.sample("hello",2)

['h', 'l']

>>> random.sample("hello",2)

['h', 'o']

>>> 

random的洗牌功能:

>>> a=[1,2,3,4,5,6,7,8,9]

>>> random.shuffle(a)

>>> a

[6, 3, 7, 4, 1, 8, 9, 2, 5]

>>> 

生成隨機驗證碼的例子:

 1 import string
 2 import random
 3 a = "".join(random.sample(string.ascii_lowercase,4))
 4 print(a)
 5 b = "".join(random.sample(string.ascii_lowercase+string.digits,5))
 6 print(b)
 7 
 8 c = "".join(random.sample(string.ascii_uppercase+string.digits+string.ascii_lowercase,4))
 9 print(c)
10 d ="".join(random.sample(string.ascii_letters+string.digits,4))
11 print(d)

運行結果如下:

1 D:\python35\python.exe D:/python培訓/s14/day5/驗證碼2.py
2 tbdy
3 6te4b
4 Z2UA
5 v8He
6 
7 Process finished with exit code 0

5、os模塊

 1 os.getcwd() 獲取當前工作目錄,即當前python腳本工作的目錄路徑
 2 os.chdir("dirname")  改變當前腳本工作目錄;相當於shell下cd
 3 os.curdir  返回當前目錄: ('.')
 4 os.pardir  獲取當前目錄的父目錄字符串名:('..')
 5 os.makedirs('dirname1/dirname2')    可生成多層遞歸目錄
 6 os.removedirs('dirname1')    若目錄為空,則刪除,並遞歸到上一級目錄,如若也為空,則刪除,依此類推
 7 os.mkdir('dirname')    生成單級目錄;相當於shell中mkdir dirname
 8 os.rmdir('dirname')    刪除單級空目錄,若目錄不為空則無法刪除,報錯;相當於shell中rmdir dirname
 9 os.listdir('dirname')    列出指定目錄下的所有文件和子目錄,包括隱藏文件,並以列表方式打印
10 os.remove()  刪除一個文件
11 os.rename("oldname","newname")  重命名文件/目錄
12 os.stat('path/filename')  獲取文件/目錄信息
13 os.sep    輸出操作系統特定的路徑分隔符,win下為"\\",Linux下為"/"
14 os.linesep    輸出當前平台使用的行終止符,win下為"\t\n",Linux下為"\n"
15 os.pathsep    輸出用於分割文件路徑的字符串
16 os.name    輸出字符串指示當前使用平台。win->'nt'; Linux->'posix'
17 os.system("bash command")  運行shell命令,直接顯示
18 os.environ  獲取系統環境變量
19 os.path.abspath(path)  返回path規范化的絕對路徑
20 os.path.split(path)  將path分割成目錄和文件名二元組返回
21 os.path.dirname(path)  返回path的目錄。其實就是os.path.split(path)的第一個元素
22 os.path.basename(path)  返回path最后的文件名。如何path以/或\結尾,那么就會返回空值。即os.path.split(path)的第二個元素
23 os.path.exists(path)  如果path存在,返回True;如果path不存在,返回False
24 os.path.isabs(path)  如果path是絕對路徑,返回True
25 os.path.isfile(path)  如果path是一個存在的文件,返回True。否則返回False
26 os.path.isdir(path)  如果path是一個存在的目錄,則返回True。否則返回False
27 os.path.join(path1[, path2[, ...]])  將多個路徑組合后返回,第一個絕對路徑之前的參數將被忽略
28 os.path.getatime(path)  返回path所指向的文件或者目錄的最后存取時間
29 os.path.getmtime(path)  返回path所指向的文件或者目錄的最后修改時間

6、 sys模塊

1 sys.argv           命令行參數List,第一個元素是程序本身路徑
2 sys.exit(n)        退出程序,正常退出時exit(0)
3 sys.version        獲取Python解釋程序的版本信息
4 sys.path           返回模塊的搜索路徑,初始化時使用PYTHONPATH環境變量的值
5 sys.platform       返回操作系統平台名稱
6 sys.stdout.write('please:')

7、shutil模塊

1 import shutil
2 
3 a = open("a.txt","r",encoding="utf-8")
4 b = open("b.txt","w",encoding="utf-8")
5 
6 shutil.copyfileobj(a,b)

運行夠會復制一個文件b,將a文件中的內容復制到b文件中

shutil.copyfile("b.txt","c.txt")直接復制b.txt到c.txt

shutil.copymode(src,dst)  僅拷貝權限。內容,組,用戶均不變

shutil.copystat(src,dst)拷貝狀態的信息

shutil.copytree(src,dst,symlinks=false,ignore=none) 遞歸拷貝文件

shutil.rmtree(path[,ignore_errors[,onerror]])

shutil.move(sr,dst)

遞歸移動文件

8、用於序列化的兩個模塊json&pickle

json,用於字符串 和 python數據類型間進行轉換

pickle,用於python特有的類型 和 python的數據類型間進行轉換

Json模塊提供了四個功能:dumps、dump、loads、load

pickle模塊提供了四個功能:dumps、dump、loads、load

9、 關於shelve模塊

代碼例子:

 1 #AUTHOR:FAN
 2 import shelve
 3 import datetime
 4 
 5 d = shelve.open("shelve_test")
 6 
 7 info = {"name":"dean","job":"it","age":23}
 8 
 9 d["name"]=info["name"]
10 d["job"]=info["job"]
11 d["date"]=datetime.datetime.now()
12 d.close()

運行結果,會生成如下三個文件

取出上述存的數據的代碼如下:

1 d = shelve.open("shelve_test")
2 print(d.get("name"))
3 print(d.get("job"))
4 print(d.get("date"))

運行結果如下:

1 D:\python35\python.exe D:/python培訓/s14/day5/shelve模塊/shelve_test.py
2 dean
3 it
4 2016-08-24 16:04:13.325482
5 
6 Process finished with exit code 0

10、正則re模塊

 1 '.'     默認匹配除\n之外的任意一個字符,若指定flag DOTALL,則匹配任意字符,包括換行
 2 '^'     匹配字符開頭,若指定flags MULTILINE,這種也可以匹配上(r"^a","\nabc\neee",flags=re.MULTILINE)
 3 '$'     匹配字符結尾,或e.search("foo$","bfoo\nsdfsf",flags=re.MULTILINE).group()也可以
 4 '*'     匹配*號前的字符0次或多次,re.findall("ab*","cabb3abcbbac")  結果為['abb', 'ab', 'a']
 5 '+'     匹配前一個字符1次或多次,re.findall("ab+","ab+cd+abb+bba") 結果['ab', 'abb']
 6 '?'     匹配前一個字符1次或0次
 7 '{m}'   匹配前一個字符m次
 8 '{n,m}' 匹配前一個字符n到m次,re.findall("ab{1,3}","abb abc abbcbbb") 結果'abb', 'ab', 'abb']
 9 '|'     匹配|左或|右的字符,re.search("abc|ABC","ABCBabcCD").group() 結果'ABC'
10 '(...)' 分組匹配,re.search("(abc){2}a(123|456)c", "abcabca456c").group() 結果 abcabca456c
11  
12  
13 '\A'    只從字符開頭匹配,re.search("\Aabc","alexabc") 是匹配不到的
14 '\Z'    匹配字符結尾,同$
15 '\d'    匹配數字0-9
16 '\D'    匹配非數字
17 '\w'    匹配[A-Za-z0-9]
18 '\W'    匹配非[A-Za-z0-9]
19 's'     匹配空白字符、\t、\n、\r , re.search("\s+","ab\tc1\n3").group() 結果 '\t'

r代表取消引號里面特殊字符的意義

最常用的匹配語法:

re.match從頭開始匹配

re.search匹配包含

re.findall把所有匹配到的字符放到以列表中的元素返回

re.splitall以匹配到的字符當做列表分隔符

re.sub匹配字符並替換

下面是關於正則的例子幫助理解:

  1 >>> re.match("^zhao","zhaofan123")
  2 <_sre.SRE_Match object; span=(0, 4), match='zhao'>
  3 >>> re.match("^ww","zhaofan123")
  4 >>>
  5 從這里也可以看出,如果有返回則表示匹配到了,否則則是沒有匹配到
  6 >>> res = re.match("^zhao","zhaofan123")
  7 >>> res
  8 <_sre.SRE_Match object; span=(0, 4), match='zhao'>
  9 >>> res.group() #如果想要查看匹配的內容.group()
 10 'zhao'
 11 >>>
 12 匹配zhao后面以及數字
 13 >>> res = re.match("^zhao\d","zhao2323fan123")
 14 >>> res.group()
 15 'zhao2'
 16 匹配多個數字
 17 >>> res = re.match("^zhao\d+","zhao2323fan123")
 18 >>> res.group()
 19 'zhao2323'
 20 >>>
 21 
 22 查找特定字符
 23 >>> re.search("f.+n","zhao2323fan123")
 24 <_sre.SRE_Match object; span=(8, 11), match='fan'>
 25 >>>
 26 >>> re.search("f.+n","zhao2323fan123n")
 27 <_sre.SRE_Match object; span=(8, 15), match='fan123n'>
 28 >>>
 29 
 30 >>> re.search("f[a-z]+n","zhao2323fan123n")
 31 <_sre.SRE_Match object; span=(8, 11), match='fan'>
 32 >>>
 33 $是匹配到字符串的最后
 34 >>> re.search("#.+#","1234#hello#")
 35 <_sre.SRE_Match object; span=(4, 11), match='#hello#'>
 36 >>>
 37 >>> re.search("aa?","zhaaaofan")
 38 <_sre.SRE_Match object; span=(2, 4), match='aa'>
 39 >>> re.search("aaa?","zhaaaofan")
 40 <_sre.SRE_Match object; span=(2, 5), match='aaa'>
 41 >>>
 42 >>> re.search("aaa?","zhaaofan")
 43 <_sre.SRE_Match object; span=(2, 4), match='aa'>
 44 >>>
 45 
 46 <_sre.SRE_Match object; span=(2, 5), match='aaa'>
 47 >>> re.search("aaa?","zhaaofaaan")
 48 <_sre.SRE_Match object; span=(2, 4), match='aa'>
 49 >>> re.search("aaa?","zhaofaaan")
 50 <_sre.SRE_Match object; span=(5, 8), match='aaa'>
 51 >>> re.search("aaa?","zhaaofaaan")
 52 <_sre.SRE_Match object; span=(2, 4), match='aa'>
 53 從上面可以很好的理解?是匹配前一個字符0次或者1次
 54 通俗的說就是aa后面有1個或者沒有a都可以匹配到
 55 >>> re.search("[0-9]{3}","aaax234sdfaass22s")
 56 <_sre.SRE_Match object; span=(4, 7), match='234'>
 57 >>>
 58 匹配數字3次
 59 >>> re.search("[0-9]{3}","aaax234sdfaass22s")
 60 <_sre.SRE_Match object; span=(4, 7), match='234'>
 61 >>>
 62 匹配數字1次到3次
 63 >>> re.search("[0-9]{1,3}","aaa23sdfsdf2323ss")
 64 <_sre.SRE_Match object; span=(3, 5), match='23'>
 65 >>>
 66 找到所有的數字
 67 >>> re.findall("[0-9]{1,3}","sss23sdf2223ss11")
 68 ['23', '222', '3', '11']
 69 >>>
 70 
 71 >>> re.search("abc|ABC","ABCabCD").group()
 72 'ABC'
 73 >>> re.findall("abc|ABC","ABCabcCD")
 74 ['ABC', 'abc']
 75 >>>
 76 >>> re.search("abc{2}","zhaofanabccc")
 77 <_sre.SRE_Match object; span=(7, 11), match='abcc'>
 78 >>>
 79 >>> re.search("(abc){2}","zhaofanabcabc")
 80 <_sre.SRE_Match object; span=(7, 13), match='abcabc'>
 81 高級用法:
 82 >>> re.search("(?P<id>[0-9]+)","abc12345daf#s22")
 83 <_sre.SRE_Match object; span=(3, 8), match='12345'>
 84 >>> re.search("(?P<id>[0-9]+)","abc12345daf#s22").group()
 85 '12345'
 86 >>> re.search("(?P<id>[0-9]+)","abc12345daf#s22").groupdict()
 87 {'id': '12345'}
 88 >>>
 89 
 90 
 91 split的用法:
 92 >>> re.split("[0-9]+","acb23sdf2d22ss")
 93 ['acb', 'sdf', 'd', 'ss']
 94 >>>
 95 sub替換的用法
 96 >>> re.sub("[0-9]+","#","234ssdfsdf23sdf22ss3s")
 97 '#ssdfsdf#sdf#ss#s'
 98 >>>
 99 
100 >>> re.sub("[0-9]+","#","234ssdfsdf23sdf22ss3s",count=2)
101 '#ssdfsdf#sdf22ss3s'
102 >>>

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM