日韩黑丝制服一区视频播放|日韩欧美人妻丝袜视频在线观看|九九影院一级蜜桃|亚洲中文在线导航|青草草视频在线观看|婷婷五月色伊人网站|日本一区二区在线|国产AV一二三四区毛片|正在播放久草视频|亚洲色图精品一区

分享

Python爬蟲(chóng)與數(shù)據(jù)分析之模塊:內(nèi)置模塊、開(kāi)源模塊、自定義模塊

 看見(jiàn)就非常 2020-04-30

模塊,用一砣代碼實(shí)現(xiàn)了某個(gè)功能的代碼集合。 

類(lèi)似于函數(shù)式編程和面向過(guò)程編程,函數(shù)式編程則完成一個(gè)功能,其他代碼用來(lái)調(diào)用即可,提供了代碼的重用性和代碼間的耦合。而對(duì)于一個(gè)復(fù)雜的功能來(lái),可能需要多個(gè)函數(shù)才能完成(函數(shù)又可以在不同的.py文件中),n個(gè) .py 文件組成的代碼集合就稱(chēng)為模塊。

如:os 是系統(tǒng)相關(guān)的模塊;file是文件操作相關(guān)的模塊

模塊分為三種:

  • 自定義模塊

  • 內(nèi)置模塊

  • 開(kāi)源模塊

自定義模塊

1、定義模塊

情景一:

  

情景二:

  

情景三:

  

2、導(dǎo)入模塊

Python之所以應(yīng)用越來(lái)越廣泛,在一定程度上也依賴(lài)于其為程序員提供了大量的模塊以供使用,如果想要使用模塊,則需要導(dǎo)入。導(dǎo)入模塊有一下幾種方法:

1

2

3

4

import module

from module.xx.xx import xx

from module.xx.xx import xx as rename  

from module.xx.xx import *

導(dǎo)入模塊其實(shí)就是告訴Python解釋器去解釋那個(gè)py文件

  • 導(dǎo)入一個(gè)py文件,解釋器解釋該py文件

  • 導(dǎo)入一個(gè)包,解釋器解釋該包下的 __init__.py 文件

那么問(wèn)題來(lái)了,導(dǎo)入模塊時(shí)是根據(jù)那個(gè)路徑作為基準(zhǔn)來(lái)進(jìn)行的呢?即:sys.path

1

2

3

4

5

import sys

print sys.path

結(jié)果:

['/Users/wupeiqi/PycharmProjects/calculator/p1/pp1', '/usr/local/lib/python2.7/site-packages/setuptools-15.2-py2.7.egg', '/usr/local/lib/python2.7/site-packages/distribute-0.6.28-py2.7.egg', '/usr/local/lib/python2.7/site-packages/MySQL_python-1.2.4b4-py2.7-macosx-10.10-x86_64.egg', '/usr/local/lib/python2.7/site-packages/xlutils-1.7.1-py2.7.egg', '/usr/local/lib/python2.7/site-packages/xlwt-1.0.0-py2.7.egg', '/usr/local/lib/python2.7/site-packages/xlrd-0.9.3-py2.7.egg', '/usr/local/lib/python2.7/site-packages/tornado-4.1-py2.7-macosx-10.10-x86_64.egg', '/usr/local/lib/python2.7/site-packages/backports.ssl_match_hostname-3.4.0.2-py2.7.egg', '/usr/local/lib/python2.7/site-packages/certifi-2015.4.28-py2.7.egg', '/usr/local/lib/python2.7/site-packages/pyOpenSSL-0.15.1-py2.7.egg', '/usr/local/lib/python2.7/site-packages/six-1.9.0-py2.7.egg', '/usr/local/lib/python2.7/site-packages/cryptography-0.9.1-py2.7-macosx-10.10-x86_64.egg', '/usr/local/lib/python2.7/site-packages/cffi-1.1.1-py2.7-macosx-10.10-x86_64.egg', '/usr/local/lib/python2.7/site-packages/ipaddress-1.0.7-py2.7.egg', '/usr/local/lib/python2.7/site-packages/enum34-1.0.4-py2.7.egg', '/usr/local/lib/python2.7/site-packages/pyasn1-0.1.7-py2.7.egg', '/usr/local/lib/python2.7/site-packages/idna-2.0-py2.7.egg', '/usr/local/lib/python2.7/site-packages/pycparser-2.13-py2.7.egg', '/usr/local/lib/python2.7/site-packages/Django-1.7.8-py2.7.egg', '/usr/local/lib/python2.7/site-packages/paramiko-1.10.1-py2.7.egg', '/usr/local/lib/python2.7/site-packages/gevent-1.0.2-py2.7-macosx-10.10-x86_64.egg', '/usr/local/lib/python2.7/site-packages/greenlet-0.4.7-py2.7-macosx-10.10-x86_64.egg', '/Users/wupeiqi/PycharmProjects/calculator', '/usr/local/Cellar/python/2.7.9/Frameworks/Python.framework/Versions/2.7/lib/python27.zip', '/usr/local/Cellar/python/2.7.9/Frameworks/Python.framework/Versions/2.7/lib/python2.7', '/usr/local/Cellar/python/2.7.9/Frameworks/Python.framework/Versions/2.7/lib/python2.7/plat-darwin', '/usr/local/Cellar/python/2.7.9/Frameworks/Python.framework/Versions/2.7/lib/python2.7/plat-mac', '/usr/local/Cellar/python/2.7.9/Frameworks/Python.framework/Versions/2.7/lib/python2.7/plat-mac/lib-scriptpackages', '/usr/local/Cellar/python/2.7.9/Frameworks/Python.framework/Versions/2.7/lib/python2.7/lib-tk', '/usr/local/Cellar/python/2.7.9/Frameworks/Python.framework/Versions/2.7/lib/python2.7/lib-old', '/usr/local/Cellar/python/2.7.9/Frameworks/Python.framework/Versions/2.7/lib/python2.7/lib-dynload', '/usr/local/lib/python2.7/site-packages', '/Library/Python/2.7/site-packages']

如果sys.path路徑列表沒(méi)有你想要的路徑,可以通過(guò) sys.path.append('路徑') 添加。
通過(guò)os模塊可以獲取各種目錄,例如:

  1. import sys
  2. import os
  3. pre_path = os.path.abspath('../')
  4. sys.path.append(pre_path)

開(kāi)源模塊

一、下載安裝

下載安裝有兩種方式:

yum 
pip
apt-get
...

  下載源碼

解壓源碼
進(jìn)入目錄
編譯源碼    python setup.py build
安裝源碼    python setup.py install

注:在使用源碼安裝時(shí),需要使用到gcc編譯和python開(kāi)發(fā)環(huán)境,所以,需要先執(zhí)行:

1

2

3

4

yum install gcc

yum install python-devel

apt-get python-dev

安裝成功后,模塊會(huì)自動(dòng)安裝到 sys.path 中的某個(gè)目錄中,如:

1

/usr/lib/python2.7/site-packages/

二、導(dǎo)入模塊

同自定義模塊中導(dǎo)入的方式

三、模塊 paramiko

paramiko是一個(gè)用于做遠(yuǎn)程控制的模塊,使用該模塊可以對(duì)遠(yuǎn)程服務(wù)器進(jìn)行命令或文件操作,值得一說(shuō)的是,fabric和ansible內(nèi)部的遠(yuǎn)程管理就是使用的paramiko來(lái)現(xiàn)實(shí)。

1、下載安裝

1

pip3 install paramiko

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

# pycrypto,由于 paramiko 模塊內(nèi)部依賴(lài)pycrypto,所以先下載安裝pycrypto

# 下載安裝 pycrypto

wget http://files.cnblogs.com/files/wupeiqi/pycrypto-2.6.1.tar.gz

tar -xvf pycrypto-2.6.1.tar.gz

cd pycrypto-2.6.1

python setup.py build

python setup.py install

進(jìn)入python環(huán)境,導(dǎo)入Crypto檢查是否安裝成功

# 下載安裝 paramiko

wget http://files.cnblogs.com/files/wupeiqi/paramiko-1.10.1.tar.gz

tar -xvf paramiko-1.10.1.tar.gz

cd paramiko-1.10.1

python setup.py build

python setup.py install

# 進(jìn)入python環(huán)境,導(dǎo)入paramiko檢查是否安裝成功

2、使用模塊

  1. #!/usr/bin/env python
  2. #coding:utf-8
  3. import paramiko
  4. ssh = paramiko.SSHClient()
  5. ssh.set_missing_host_key_policy(paramiko.AutoAddPolicy())
  6. ssh.connect('192.168.1.108', 22, 'alex', '123')
  7. stdin, stdout, stderr = ssh.exec_command('df')
  8. print stdout.read()
  9. ssh.close();
  10. import paramiko
  11. private_key_path = '/home/auto/.ssh/id_rsa'
  12. key = paramiko.RSAKey.from_private_key_file(private_key_path)
  13. ssh = paramiko.SSHClient()
  14. ssh.set_missing_host_key_policy(paramiko.AutoAddPolicy())
  15. ssh.connect('主機(jī)名 ', 端口, '用戶(hù)名', key)
  16. stdin, stdout, stderr = ssh.exec_command('df')
  17. print stdout.read()
  18. ssh.close()
  19. import os,sys
  20. import paramiko
  21. t = paramiko.Transport(('182.92.219.86',22))
  22. t.connect(username='wupeiqi',password='123')
  23. sftp = paramiko.SFTPClient.from_transport(t)
  24. sftp.put('/tmp/test.py','/tmp/test.py')
  25. t.close()
  26. import os,sys
  27. import paramiko
  28. t = paramiko.Transport(('182.92.219.86',22))
  29. t.connect(username='wupeiqi',password='123')
  30. sftp = paramiko.SFTPClient.from_transport(t)
  31. sftp.get('/tmp/test.py','/tmp/test2.py')
  32. t.close()
  33. import paramiko
  34. pravie_key_path = '/home/auto/.ssh/id_rsa'
  35. key = paramiko.RSAKey.from_private_key_file(pravie_key_path)
  36. t = paramiko.Transport(('182.92.219.86',22))
  37. t.connect(username='wupeiqi',pkey=key)
  38. sftp = paramiko.SFTPClient.from_transport(t)
  39. sftp.put('/tmp/test3.py','/tmp/test3.py')
  40. t.close()
  41. import paramiko
  42. pravie_key_path = '/home/auto/.ssh/id_rsa'
  43. key = paramiko.RSAKey.from_private_key_file(pravie_key_path)
  44. t = paramiko.Transport(('182.92.219.86',22))
  45. t.connect(username='wupeiqi',pkey=key)
  46. sftp = paramiko.SFTPClient.from_transport(t)
  47. sftp.get('/tmp/test3.py','/tmp/test4.py')
  48. t.close()

內(nèi)置模塊

一、os

用于提供系統(tǒng)級(jí)別的操作

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

二、sys

用于提供對(duì)解釋器相關(guān)的操作

  1. sys.argv 命令行參數(shù)List,第一個(gè)元素是程序本身路徑
  2. sys.exit(n) 退出程序,正常退出時(shí)exit(0)
  3. sys.version 獲取Python解釋程序的版本信息
  4. sys.maxint 最大的Int值
  5. sys.path 返回模塊的搜索路徑,初始化時(shí)使用PYTHONPATH環(huán)境變量的值
  6. sys.platform 返回操作系統(tǒng)平臺(tái)名稱(chēng)
  7. sys.stdout.write('please:')
  8. val = sys.stdin.readline()[:-1]

更多猛擊這里

三、hashlib 

用于加密相關(guān)的操作,代替了md5模塊和sha模塊,主要提供 SHA1, SHA224, SHA256, SHA384, SHA512 ,MD5 算法

  1. import md5
  2. hash = md5.new()
  3. hash.update('admin')
  4. print hash.hexdigest()
  5. import sha
  6. hash = sha.new()
  7. hash.update('admin')
  8. print hash.hexdigest()

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

26

27

28

29

30

31

32

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()

以上加密算法雖然依然非常厲害,但時(shí)候存在缺陷,即:通過(guò)撞庫(kù)可以反解。所以,有必要對(duì)加密算法中添加自定義key再來(lái)做加密。

1

2

3

4

5

6

7

import hashlib

# ######## md5 ########

hash = hashlib.md5('898oaFs09f')

hash.update('admin')

print hash.hexdigest()

還不夠吊?python 還有一個(gè) hmac 模塊,它內(nèi)部對(duì)我們創(chuàng)建 key 和 內(nèi)容 再進(jìn)行處理然后再加密

1

2

3

4

import hmac

h = hmac.new('wueiqi')

h.update('hellowo')

print h.hexdigest()

不能再牛逼了?。。?/p>

四、json  pickle 

用于序列化的兩個(gè)模塊

  • json,用于字符串 和 python數(shù)據(jù)類(lèi)型間進(jìn)行轉(zhuǎn)換

  • pickle,用于python特有的類(lèi)型 和 python的數(shù)據(jù)類(lèi)型間進(jìn)行轉(zhuǎn)換

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

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

五、執(zhí)行系統(tǒng)命令 

可以執(zhí)行shell命令的相關(guān)模塊和函數(shù)有:

  • os.system

  • os.spawn*

  • os.popen*          --廢棄

  • popen2.*           --廢棄

  • commands.*      --廢棄,3.x中被移除

import commands

result = commands.getoutput('cmd')
result = commands.getstatus('cmd')
result = commands.getstatusoutput('cmd')

以上執(zhí)行shell命令的相關(guān)的模塊和函數(shù)的功能均在 subprocess 模塊中實(shí)現(xiàn),并提供了更豐富的功能。

call 

執(zhí)行命令,返回狀態(tài)碼

1

2

ret = subprocess.call(["ls", "-l"], shell=False)

ret = subprocess.call("ls -l", shell=True)

shell = True ,允許 shell 命令是字符串形式

check_call

執(zhí)行命令,如果執(zhí)行狀態(tài)碼是 0 ,則返回0,否則拋異常

1

2

subprocess.check_call(["ls", "-l"])

subprocess.check_call("exit 1", shell=True)

check_output

執(zhí)行命令,如果狀態(tài)碼是 0 ,則返回執(zhí)行結(jié)果,否則拋異常

1

2

subprocess.check_output(["echo", "Hello World!"])

subprocess.check_output("exit 1", shell=True)

subprocess.Popen(...)

用于執(zhí)行復(fù)雜的系統(tǒng)命令

參數(shù):

  • args:shell命令,可以是字符串或者序列類(lèi)型(如:list,元組)

  • bufsize:指定緩沖。0 無(wú)緩沖,1 行緩沖,其他 緩沖區(qū)大小,負(fù)值 系統(tǒng)緩沖

  • stdin, stdout, stderr:分別表示程序的標(biāo)準(zhǔn)輸入、輸出、錯(cuò)誤句柄

  • preexec_fn:只在Unix平臺(tái)下有效,用于指定一個(gè)可執(zhí)行對(duì)象(callable object),它將在子進(jìn)程運(yùn)行之前被調(diào)用

  • close_sfs:在windows平臺(tái)下,如果close_fds被設(shè)置為T(mén)rue,則新創(chuàng)建的子進(jìn)程將不會(huì)繼承父進(jìn)程的輸入、輸出、錯(cuò)誤管道。
    所以不能將close_fds設(shè)置為T(mén)rue同時(shí)重定向子進(jìn)程的標(biāo)準(zhǔn)輸入、輸出與錯(cuò)誤(stdin, stdout, stderr)。

  • shell:同上

  • cwd:用于設(shè)置子進(jìn)程的當(dāng)前目錄

  • env:用于指定子進(jìn)程的環(huán)境變量。如果env = None,子進(jìn)程的環(huán)境變量將從父進(jìn)程中繼承。

  • universal_newlines:不同系統(tǒng)的換行符不同,True -> 同意使用 \n

  • startupinfo與createionflags只在windows下有效
    將被傳遞給底層的CreateProcess()函數(shù),用于設(shè)置子進(jìn)程的一些屬性,如:主窗口的外觀(guān),進(jìn)程的優(yōu)先級(jí)等等

終端輸入的命令分為兩種:

  • 輸入即可得到輸出,如:ifconfig

  • 輸入進(jìn)行某環(huán)境,依賴(lài)再輸入,如:python

  1. import subprocess
  2. obj = subprocess.Popen("mkdir t3", shell=True, cwd='/home/dev',)
  3. import subprocess
  4. obj = subprocess.Popen(["python"], stdin=subprocess.PIPE, stdout=subprocess.PIPE, stderr=subprocess.PIPE)
  5. obj.stdin.write('print 1 \n ')
  6. obj.stdin.write('print 2 \n ')
  7. obj.stdin.write('print 3 \n ')
  8. obj.stdin.write('print 4 \n ')
  9. obj.stdin.close()
  10. cmd_out = obj.stdout.read()
  11. obj.stdout.close()
  12. cmd_error = obj.stderr.read()
  13. obj.stderr.close()
  14. print cmd_out
  15. print cmd_error
  16. import subprocess
  17. obj = subprocess.Popen(["python"], stdin=subprocess.PIPE, stdout=subprocess.PIPE, stderr=subprocess.PIPE)
  18. obj.stdin.write('print 1 \n ')
  19. obj.stdin.write('print 2 \n ')
  20. obj.stdin.write('print 3 \n ')
  21. obj.stdin.write('print 4 \n ')
  22. out_error_list = obj.communicate()
  23. print out_error_list
  24. import subprocess
  25. obj = subprocess.Popen(["python"], stdin=subprocess.PIPE, stdout=subprocess.PIPE, stderr=subprocess.PIPE)
  26. out_error_list = obj.communicate('print "hello"')
  27. print out_error_list

六、shutil

高級(jí)的 文件、文件夾、壓縮包 處理模塊

  1. shutil.copyfileobj(fsrc, fdst[, length])
  2. 將文件內(nèi)容拷貝到另一個(gè)文件中,可以部分內(nèi)容
  3. shutil.copyfile(src, dst)
  4. 拷貝文件
  5. shutil.copymode(src, dst)
  6. 僅拷貝權(quán)限。內(nèi)容、組、用戶(hù)均不變
  7. shutil.copystat(src, dst)
  8. 拷貝狀態(tài)的信息,包括:mode bits, atime, mtime, flags
  9. shutil.copy(src, dst)
  10. 拷貝文件和權(quán)限
  11. shutil.copy2(src, dst)
  12. 拷貝文件和狀態(tài)信息
  13. shutil.ignore_patterns(*patterns)
  14. shutil.copytree(src, dst, symlinks=False, ignore=None)
  15. 遞歸的去拷貝文件
  16. 例如:copytree(source, destination, ignore=ignore_patterns('*.pyc', 'tmp*'))
  17. shutil.rmtree(path[, ignore_errors[, onerror]])
  18. 遞歸的去刪除文件
  19. shutil.move(src, dst)
  20. 遞歸的去移動(dòng)文件
  21. shutil.make_archive(base_name, format,...)

創(chuàng)建壓縮包并返回文件路徑,例如:zip、tar

  • base_name: 壓縮包的文件名,也可以是壓縮包的路徑。只是文件名時(shí),則保存至當(dāng)前目錄,否則保存至指定路徑,
    如:www                        =>保存至當(dāng)前路徑
    如:/Users/wupeiqi/www =>保存至/Users/wupeiqi/

  • format: 壓縮包種類(lèi),“zip”, “tar”, “bztar”,“gztar”

  • root_dir: 要壓縮的文件夾路徑(默認(rèn)當(dāng)前目錄)

  • owner: 用戶(hù),默認(rèn)當(dāng)前用戶(hù)

  • group: 組,默認(rèn)當(dāng)前組

  • logger: 用于記錄日志,通常是logging.Logger對(duì)象

1

2

3

4

5

6

7

8

9

#將 /Users/wupeiqi/Downloads/test 下的文件打包放置當(dāng)前程序目錄

import shutil

ret = shutil.make_archive("wwwwwwwwww", 'gztar', root_dir='/Users/wupeiqi/Downloads/test')

#將 /Users/wupeiqi/Downloads/test 下的文件打包放置 /Users/wupeiqi/目錄

import shutil

ret = shutil.make_archive("/Users/wupeiqi/wwwwwwwwww", 'gztar', root_dir='/Users/wupeiqi/Downloads/test')

shutil 對(duì)壓縮包的處理是調(diào)用 ZipFile 和 TarFile 兩個(gè)模塊來(lái)進(jìn)行的,詳細(xì):

  1. import zipfile
  2. # 壓縮
  3. z = zipfile.ZipFile('laxi.zip', 'w')
  4. z.write('a.log')
  5. z.write('data.data')
  6. z.close()
  7. # 解壓
  8. z = zipfile.ZipFile('laxi.zip', 'r')
  9. z.extractall()
  10. z.close()
  11. import tarfile
  12. # 壓縮
  13. tar = tarfile.open('your.tar','w')
  14. tar.add('/Users/wupeiqi/PycharmProjects/bbs2.zip', arcname='bbs2.zip')
  15. tar.add('/Users/wupeiqi/PycharmProjects/cmdb.zip', arcname='cmdb.zip')
  16. tar.close()
  17. # 解壓
  18. tar = tarfile.open('your.tar','r')
  19. tar.extractall() # 可設(shè)置解壓地址
  20. tar.close()

、logging

用于便捷記錄日志且線(xiàn)程安全的模塊

1

2

3

4

5

6

7

8

9

10

11

12

13

14

import logging

logging.basicConfig(filename='log.log',

                    format='%(asctime)s - %(name)s - %(levelname)s -%(module)s:  %(message)s',

                    datefmt='%Y-%m-%d %H:%M:%S %p',

                    level=10)

logging.debug('debug')

logging.info('info')

logging.warning('warning')

logging.error('error')

logging.critical('critical')

logging.log(10,'log')

對(duì)于等級(jí):

1

2

3

4

5

6

7

8

CRITICAL = 50

FATAL = CRITICAL

ERROR = 40

WARNING = 30

WARN = WARNING

INFO = 20

DEBUG = 10

NOTSET = 0

只有大于當(dāng)前日志等級(jí)的操作才會(huì)被記錄。

對(duì)于格式,有如下屬性可是配置:

、time

時(shí)間相關(guān)的操作,時(shí)間有三種表示方式:

  • 時(shí)間戳               1970年1月1日之后的秒,即:time.time()

  • 格式化的字符串    2014-11-11 11:11,    即:time.strftime('%Y-%m-%d')

  • 結(jié)構(gòu)化時(shí)間          元組包含了:年、日、星期等... time.struct_time    即:time.localtime()

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

print time.time()

print time.mktime(time.localtime())

print time.gmtime()    #可加時(shí)間戳參數(shù)

print time.localtime() #可加時(shí)間戳參數(shù)

print time.strptime('2014-11-11', '%Y-%m-%d')

print time.strftime('%Y-%m-%d') #默認(rèn)當(dāng)前時(shí)間

print time.strftime('%Y-%m-%d',time.localtime()) #默認(rèn)當(dāng)前時(shí)間

print time.asctime()

print time.asctime(time.localtime())

print time.ctime(time.time())

import datetime

'''

datetime.date:表示日期的類(lèi)。常用的屬性有year, month, day

datetime.time:表示時(shí)間的類(lèi)。常用的屬性有hour, minute, second, microsecond

datetime.datetime:表示日期時(shí)間

datetime.timedelta:表示時(shí)間間隔,即兩個(gè)時(shí)間點(diǎn)之間的長(zhǎng)度

timedelta([days[, seconds[, microseconds[, milliseconds[, minutes[, hours[, weeks]]]]]]])

strftime("%Y-%m-%d")

'''

import datetime

print datetime.datetime.now()

print datetime.datetime.now() - datetime.timedelta(days=5)

、re 

re模塊用于對(duì)python的正則表達(dá)式的操作。

字符:

  . 匹配除換行符以外的任意字符
  \w 匹配字母或數(shù)字或下劃線(xiàn)或漢字
  \s 匹配任意的空白符
  \d 匹配數(shù)字
  \b 匹配單詞的開(kāi)始或結(jié)束
  ^ 匹配字符串的開(kāi)始
  $ 匹配字符串的結(jié)束

次數(shù):

  * 重復(fù)零次或更多次
  + 重復(fù)一次或更多次
  ? 重復(fù)零次或一次
  {n} 重復(fù)n次
  {n,} 重復(fù)n次或更多次
  {n,m} 重復(fù)n到m次

IP:
^(25[0-5]|2[0-4]\d|[0-1]?\d?\d)(\.(25[0-5]|2[0-4]\d|[0-1]?\d?\d)){3}$
手機(jī)號(hào):
^1[3|4|5|8][0-9]\d{8}$

1、match(pattern, string, flags=0)

從起始位置開(kāi)始根據(jù)模型去字符串中匹配指定內(nèi)容,匹配單個(gè)

  • 正則表達(dá)式

  • 要匹配的字符串

  • 標(biāo)志位,用于控制正則表達(dá)式的匹配方式

  1. import re
  2. obj = re.match('\d+', '123uuasf')
  3. if obj:
  4. print obj.group()
  5. # flags
  6. I = IGNORECASE = sre_compile.SRE_FLAG_IGNORECASE # ignore case
  7. L = LOCALE = sre_compile.SRE_FLAG_LOCALE # assume current 8-bit locale
  8. U = UNICODE = sre_compile.SRE_FLAG_UNICODE # assume unicode locale
  9. M = MULTILINE = sre_compile.SRE_FLAG_MULTILINE # make anchors look for newline
  10. S = DOTALL = sre_compile.SRE_FLAG_DOTALL # make dot match newline
  11. X = VERBOSE = sre_compile.SRE_FLAG_VERBOSE # ignore whitespace and comments

2、search(pattern, string, flags=0)

根據(jù)模型去字符串中匹配指定內(nèi)容,匹配單個(gè)

import re
obj = re.search('\d+', 'u123uu888asf')
if obj:
  1.     print obj.group()

3、group和groups

    a = "123abc456"

print re.search("([0-9]*)([a-z]*)([0-9]*)", a).group()
print re.search("([0-9]*)([a-z]*)([0-9]*)", a).group(0)
print re.search("([0-9]*)([a-z]*)([0-9]*)", a).group(1)
print re.search("([0-9]*)([a-z]*)([0-9]*)", a).group(2)
print re.search("([0-9]*)([a-z]*)([0-9]*)", a).groups()

4、findall(pattern, string, flags=0)

上述兩中方式均用于匹配單值,即:只能匹配字符串中的一個(gè),如果想要匹配到字符串中所有符合條件的元素,則需要使用 findall。

import re
obj = re.findall('\d+', 'fa123uu888asf')
print obj

5、sub(pattern, repl, string, count=0, flags=0)

用于替換匹配的字符串

content = "123abc456"
new_content = re.sub('\d+', 'sb', content)
# new_content = re.sub('\d+', 'sb', content, 1)
print new_content

相比于str.replace功能更加強(qiáng)大

6、split(pattern, string, maxsplit=0, flags=0)

根據(jù)指定匹配進(jìn)行分組

  1. content = "'1 - 2 * ((60-30+1*(9-2*5/3+7/3*99/4*2998+10*568/14))-(-4*3)/(16-3*2) )'"
  2. new_content = re.split('\*', content)
  3. # new_content = re.split('\*', content, 1)
  4. print new_content
  5. content = "'1 - 2 * ((60-30+1*(9-2*5/3+7/3*99/4*2998+10*568/14))-(-4*3)/(16-3*2) )'"
  6. new_content = re.split('[\+\-\*\/]+', content)
  7. # new_content = re.split('\*', content, 1)
  8. print new_content
  9. inpp = '1-2*((60-30 +(-40-5)*(9-2*5/3 + 7 /3*99/4*2998 +10 * 568/14 )) - (-4*3)/ (16-3*2))'
  10. inpp = re.sub('\s*','',inpp)
  11. new_content = re.split('\(([\+\-\*\/]?\d+[\+\-\*\/]?\d+){1}\)', inpp, 1)
  12. print new_content

相比于str.split更加強(qiáng)大  

實(shí)例:計(jì)算器源碼

十、random

隨機(jī)數(shù)

1

2

3

4

mport random

print random.random()

print random.randint(1,2)

print random.randrange(1,10)

隨機(jī)驗(yàn)證碼實(shí)例:

1

2

3

4

5

6

7

8

9

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

    本站是提供個(gè)人知識(shí)管理的網(wǎng)絡(luò)存儲(chǔ)空間,所有內(nèi)容均由用戶(hù)發(fā)布,不代表本站觀(guān)點(diǎn)。請(qǐng)注意甄別內(nèi)容中的聯(lián)系方式、誘導(dǎo)購(gòu)買(mǎi)等信息,謹(jǐn)防詐騙。如發(fā)現(xiàn)有害或侵權(quán)內(nèi)容,請(qǐng)點(diǎn)擊一鍵舉報(bào)。
    轉(zhuǎn)藏 分享 獻(xiàn)花(0

    0條評(píng)論

    發(fā)表

    請(qǐng)遵守用戶(hù) 評(píng)論公約

    類(lèi)似文章 更多