-------------------接《python內置模塊(一)》--------------------------------html
4、json、pickle 數據序列化python
用於序列化的兩個模塊shell
json,用於字符串 和 python數據類型間進行轉換json
pickle,用於python特有的類型 和 python的數據類型間進行轉換windows
Json模塊提供了四個功能:dumps、dump、loads、loaddom
pickle模塊提供了四個功能:dumps、dump、loads、loadide
# pickle.dumps 經過特殊的形式將數據轉換成只有python能認識的字符串
函數
>>> import picklespa
>>> data = {'lihongye1':'pwd1','lihongye2':'pwd2'}日誌
>>> p_str = pickle.dumps(data)
>>> print(p_str)
或將字符串轉換成只有python能認識的字符串存儲在文件中
test = { 'user':'lihongye','pwd':'pwd1','num':'123'}
import pickle
fw = open('test_file','wb')
fw.write(pickle.dumps(test))
經過pickle.loads 將字符串轉成原數據形式
import pickle
fr = open('test_file','rb')
frp = pickle.load(fr)
print(frp)
# 也可經過json.dumps方式將數據轉成全部程序都能認識的字符串格式並寫入文件
test = { 'user':'lihongye','pwd':'pwd1','num':'123'}
import json
fw = open('test_file','w')
fw.write(json.dumps(test))
經過json.loads方式將字符串轉換成原數據格式
import json
fr = open('test_file','r')
frp = json.load(fr)
print(frp)
5、 random
隨機數
>>> import random
>>> random.random() # 隨機小數
0.7558096251338481
>>> random.randint(1,3) # 有範圍的隨機數1-3
2
>>> random.randrange(1,10) # 有範圍的隨機數1-9
1
隨機驗證碼實例
import random
check_code = ''
for i in range(4):
current = random.randint(0,4)
if current != i:
tmp = str(chr(random.randint(65,90)))
else:
tmp = random.randint(0,9)
check_code += str(current)
print(check_code)
6、 subprocess 執行系統命令
call 執行系統命令,若是命令正確則返回狀態碼,不然拋出異常
>>> res = subprocess.call(['ls','-l'],shell=False)
>>> res = subprocess.call(['ls -l'],shell=True)
shell = True 調用系統平臺執行命令;
check_call 執行命令,若是執行狀態碼是 0 ,則返回0,不然拋異常
>>> res = subprocess.check_call(['ls -l'],shell=True) 結果是0
>>> res = subprocess.check_call(['ls-l'],shell=True) 結果異常
check_output 執行命令,若是執行狀態碼是 0 ,則返回結果,不然拋異常
>>> res = subprocess.check_ouput(['ls -l'],shell=True) 返回執行結果
>>> res = subprocess.check_ouput(['ls-l'],shell=True) 結果異常
Popen 用於執行更加複雜的系統命令
可用參數:
args: shell命令,能夠是字符串或者序列類型(如:list,元組)
bufsize: 指定緩衝。0 無緩衝,1 行緩衝,其餘 緩衝區大小,負值 系統緩衝
stdin, stdout, stderr:分別表示程序的標準輸入、輸出、錯誤句柄
preexec_fn:只在Unix平臺下有效,用於指定一個可執行對象(callable object),它將在
子進程運行以前被調用
close_sfs: 在windows平臺下,若是close_fds被設置爲True,則新建立的子進程將不會繼承
父進程的輸入、輸出、錯誤管道。因此不能將close_fds設置爲True同時重定向
子進程的標準輸入、輸出與錯誤(stdin, stdout, stderr)。
shell:同上cwd:用於設置子進程的當前目錄env:用於指定子進程的環境變量。若是env = None,子進程的環境變量將從父進程中繼承。universal_newlines:不一樣系統的換行
符不一樣,True -> 贊成使用 \nstartupinfo與createionflags只在windows下有效將被
傳遞給底層的CreateProcess()函數,用於設置子進程的一些屬性,如:主窗口的外觀,
進程的優先級等等
>>>res=subprocess.Popen(['python3'],stdin=subprocess.PIPE, stdout=subprocess.PIPE,stderr=subprocess.PIPE)
>>> res.stdin.write(b"print('hello1')\n")
16
>>> res.stdin.write(b"print('hello2')\n")
16
>>> res.stdin.write(b"print('hello3')\n")
16
>>> ret = res.communicate(timeout=10)
>>> print(ret)
(b'hello1\nhello2\nhello3\n', b'')
>>> res.pid
5722
>>> res.terminate() 會成爲殭屍進程並與父進程失去聯繫
root 5722 5633 0 10:19 pts/0 00:00:00 [python3] <defunct>
>>> res.wait() 徹底釋放掉資源
更多點擊這裏
7、 shutil 高級文件、文件夾、壓縮包處理模塊
shutil.copyfileobj(fsrc, fdst[, length]) 將文件內容拷貝到另外一文件
fsrc 源文件 fdst 目標文件 length 每次拷貝長度(無關緊要)
>>> import shutil
>>> s = open("smtp.py")
>>> d = open("smtp_copy","w")
>>> shutil.copyfileobj(s,d,length=20)
>>> d.close()
[root@python ~]# cat smtp_copy
shutil.copyfile(src, dst) 拷貝文件
>>> import shutil
>>> shutil.copyfile('smtp.py','smtp')
[root@python ~]# ls smtp smtp.py
smtp smtp.py
shutil.copymode(src, dst) 僅拷貝權限。內容、組、用戶均不變
>>> shutil.copymode('smtp.py','smtp')
[root@python ~]# ll smtp smtp.py
-rw-r--r-- 1 root root 1309 Jan 25 12:02 smtp
-rw-r--r-- 1 root root 1309 Dec 28 01:30 smtp.py
shutil.copystat(src, dst) 拷貝狀態的信息,包括:mode bits, atime, mtime, flags
>>> shutil.copystat('smtp.py','smtp')
[root@python ~]# ll smtp smtp.py
-rw-r--r-- 1 root root 1309 Dec 28 01:30 smtp
-rw-r--r-- 1 root root 1309 Dec 28 01:30 smtp.py
shutil.copy(src, dst) 拷貝文件和權限
>>> shutil.copy('smtp.py','smtp_copy')
[root@python ~]# ll smtp smtp_copy
-rw-r--r-- 1 root root 1309 Dec 28 01:30 smtp
-rw-r--r-- 1 root root 1309 Jan 25 12:19 smtp_copy
shutil.copy2(src, dst) 拷貝文件和狀態信息
>>> shutil.copy2('smtp.py','smtp')
[root@python ~]# ll smtp*
-rw-r--r-- 1 root root 1309 Dec 28 01:30 smtp
-rw-r--r-- 1 root root 1309 Dec 28 01:30 smtp.py
shutil.ignore_patterns(*patterns)
shutil.copytree(src, dst, symlinks=False, ignore=None) 遞歸的去拷貝文件
>>> shutil.copytree('dir1','dir2')
[root@python ~]# ll dir1
total 4
drwxr-xr-x 3 root root 4096 Jan 25 11:19 dir2
[root@python ~]# ll dir2
total 4
drwxr-xr-x 3 root root 4096 Jan 25 11:19 dir2
shutil.rmtree(path[, ignore_errors[, onerror]]) 遞歸的去刪除文件
>>> shutil.rmtree('dir2')
[root@python ~]# ll dir2
ls: cannot access dir2: No such file or directory
shutil.move(src, dst) 遞歸的去移動文件
>>> shutil.move('dir1','/tmp')
[root@python ~]# ll dir1
ls: cannot access dir1: No such file or directory
[root@python ~]# ll /tmp/dir1
total 4
drwxr-xr-x 3 root root 4096 Jan 25 11:19 dir2
shutil.make_archive(base_name, format,...)
建立壓縮包並返回文件路徑,例如:zip、tar
base_name: 壓縮包的文件名,也能夠是壓縮包的路徑。只是文件名時,則保存至當前
目錄,不然保存至指定路徑,
如:www =>保存至當前路徑
如:/Users/wupeiqi/www =>保存至/Users/wupeiqi/
format: 壓縮包種類,「zip」, 「tar」, 「bztar」,「gztar」
root_dir: 要壓縮的文件夾路徑(默認當前目錄)
owner: 用戶,默認當前用戶
group: 組,默認當前組
logger: 用於記錄日誌,一般是logging.Logger對象
例:
>>> shutil.make_archive('dir1_archive',format='zip',root_dir='/root/dir1')
[root@python ~]# ll dir1*
-rw-r--r-- 1 root root 22 Feb 21 04:04 dir1_archive.zip
---------------------------- 接 內置模塊(三)------------------------------------