1. 程式人生 > >第四章——續

第四章——續

logging out false 版本 搜索 dir tde 信息 div

4.5 sys模塊

sys.argv           命令行參數List,第一個元素是程序本身路徑
sys.exit(n)        退出程序,正常退出時exit(0)
sys.version        獲取Python解釋程序的版本信息
sys.maxint         最大的Int值
sys.path           返回模塊的搜索路徑,初始化時使用PYTHONPATH環境變量的值
sys.platform       返回操作系統平臺名稱
sys.stdout.write(please:)  #標準輸出 , 引出進度條的例子, 註,在py3上不行,可以用print代替
val = sys.stdin.readline()[:-1] #標準輸入 sys.getrecursionlimit() #獲取最大遞歸層數 sys.setrecursionlimit(1200) #設置最大遞歸層數 sys.getdefaultencoding() #獲取解釋器默認編碼 sys.getfilesystemencoding #獲取內存數據存到文件裏的默認編碼

4.6 shutil模塊

shutil模塊

高級的文件、文件夾、壓縮包處理模塊

shutil.copyfileobj(fsrc,fdst[,length])

將文件內容拷貝到另一個文件中

import shutil
shutil.copyfileobj(open(
old.xml,r), open(new.xml, w))

shutil.copyfile(src,dst)

拷貝文件

shutil.copyfile(f1.log, f2.log) #目標文件無需存在

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

shutil.copymode(f1.log, f2.log) #目標文件必須存在

shutil.copystat(src, dst)
僅拷貝狀態的信息,包括:mode bits, atime, mtime, flags

shutil.copystat(f1.log
, f2.log) #目標文件必須存在

shutil.copy(src, dst)
拷貝文件和權限

import shutil
shutil.copy(f1.log, f2.log)

shutil.copy2(src, dst)
拷貝文件和狀態信息

import shutil
shutil.copy2(f1.log, f2.log)

shutil.ignore_patterns(*patterns)
shutil.copytree(src, dst, symlinks=False, ignore=None)
遞歸的去拷貝文件夾

import shutil
shutil.copytree(folder1, folder2, ignore=shutil.ignore_patterns(*.pyc, tmp*)) #目標目錄不能存在,註意對folder2目錄父級目錄要有可寫權限,ignore的意思是排除

shutil.rmtree(path[, ignore_errors[, onerror]])
遞歸的去刪除文件

import shutil
shutil.rmtree(folder1)

shutil.move(src, dst)
遞歸的去移動文件,它類似mv命令,其實就是重命名。

import shutil
shutil.move(folder1, folder3)

shutil.make_archive(base_name, format,...)
創建壓縮包並返回文件路徑,例如:zip、tar
創建壓縮包並返回文件路徑,例如:zip、tar

  • base_name: 壓縮包的文件名,也可以是壓縮包的路徑。只是文件名時,則保存至當前目錄,否則保存至指定路徑,

如 data_bak =>保存至當前路徑
如:/tmp/data_bak =>保存至/tmp/

    • format: 壓縮包種類,“zip”, “tar”, “bztar”,“gztar”
    • root_dir: 要壓縮的文件夾路徑(默認當前目錄)
    • owner: 用戶,默認當前用戶
    • group: 組,默認當前組
    • logger: 用於記錄日誌,通常是logging.Logger對象
#將 /data 下的文件打包放置當前程序目錄
import shutil
ret = shutil.make_archive("data_bak", gztar, root_dir=/data)

#將 /data下的文件打包放置 /tmp/目錄
import shutil
ret = shutil.make_archive("/tmp/data_bak", gztar, root_dir=/data)

shutil 對壓縮包的處理是調用 ZipFile 和 TarFile 兩個模塊來進行的,詳細:
zipfile壓縮&解壓縮

import zipfile

# 壓縮
z = zipfile.ZipFile(laxi.zip, w)
z.write(a.log)
z.write(data.data)
z.close()

# 解壓
z = zipfile.ZipFile(laxi.zip, r)
z.extractall(path=.)
z.close()

tarfile壓縮&解壓縮

import tarfile

# 壓縮
>>> t=tarfile.open(/tmp/egon.tar,w)
>>> t.add(/test1/a.py,arcname=a.bak)
>>> t.add(/test1/b.py,arcname=b.bak)
>>> t.close()

# 解壓
>>> t=tarfile.open(/tmp/egon.tar,r)
>>> t.extractall(/egon)
>>> t.close()

4.7 json&pickle

用於序列化的兩個模塊

  • json,用於字符串 和 python數據類型間進行轉換
  • pickle,用於python特有的類型 和 python的數據類型間進行轉換

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

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

import pickle
data = {k1:123,k2:Hello}

# pickle.dumps 將數據通過特殊的形式轉換位只有python語言認識的字符串
p_str = pickle.dumps(data)
print(p_str)

#pickle.dump 將數據通過特殊的形式轉換位只有python語言認識的字符串,並寫入文件
with open(D:/result.pk,wb,encoding=utf8) as fp:
    pickle.dump(data,fp)

import json
# json.dumps 將數據通過特殊的形式轉換位所有程序語言都認識的字符串
j_str = json.dumps(data)
print(j_str)

#pickle.dump 將數據通過特殊的形式轉換位只有python語言認識的字符串,並寫入文件
with open(D:/result.json,wb,encoding=utf8) as fp:
    json.dump(data,fp)

json vs pickle:

JSON:

優點:跨語言、體積小

缺點:只能支持int\str\list\tuple\dict

Pickle:

優點:專為python設計,支持python所有的數據類型

缺點:只能在python中使用,存儲數據占空間大

4.8 shelve

shelve模塊是一個簡單的k,v將內存數據通過文件持久化的模塊,可以持久化任何pickle可支持的python數據格式

序列化:

import shelve

f = shelve.open(shelve_test)  # 打開一個文件



names = ["alex", "rain", "test"]
info = {name:alex,age:22}


f["names"] = names  # 持久化列表
f[info_dic] = info

f.close()

反序列化:

import shelve

d = shelve.open(shelve_test)  # 打開一個文件

print(d[names])
print(d[info_dic])


#del d[‘test‘] #還可以刪除

第四章——續