經常使用模塊2

 

1、os模塊

os模塊提供了不少容許你的程序與操做系統直接交互的功能。node

os.getcwd() : 獲得當前的工做目錄,即當前Python腳本工做的目錄路徑
os.listdir() : 返回指定目錄下的全部文件和目錄名
os.remove() : 函數用來刪除一個文件
os.removedirs(r"c:\python") :刪除多個目錄
os.path.isfile() :檢測給出的路徑是不是一個文件
os.path.isdir():檢驗給出的路徑是不是一個目錄
os.path.isabs():檢驗給出的路徑是不是絕對路徑
os.path.exists():檢驗給出的路徑是否存在
os.path.split():返回一個路徑的目錄名和文件名
os.path.splitext():分離擴展名
os.path.dirname():獲取路徑名
os.path.abspath():獲取絕對路徑
os.path.basename():獲取文件名
os.system():運行shell命令
os.getenv("HOME"):讀取操做系統環境變量HOME的值
os.environ:返回操做系統全部的環境變量。至關於env命令
os.environ.setdefault('HOME','/home/alex'):設置系統環境變量,僅程序運行時有效
os.linesep:輸出當前平臺的行終止符。Windows使用/r/n,Linux和Mac使用/n
os.name:指示你正在使用的平臺。nt表示Windows
os.rename(old,new):重命名
os.makedirs(r"c:\python\test"):建立多級目錄
os.mkdir("test"):建立單個目錄
os.stat(file):獲取文件屬性
os.chmod(file):修改文件權限與時間戳
##os.exit():終止當前進程
os.path.getsize(filename):獲取文件大小
os.path.join(dir,filename) :結合目錄名和文件名
os.chdir(dirname):切換目錄到dirname
os.get_terminal_size:獲取當前終(窗口)端的大小
os.kill(1000,signal.SIGKILL):殺死進程。import signal

>>> import os
>>> os.getcwd()
'G:\\myProject'
>>> os.listdir()
['.idea', 'python', '第一模塊章節2', '第二模塊章節1', '第二模塊章節2']
>>> os.system('ping baidu.com')

���� Ping baidu.com [111.13.101.208] ���� 32 �ֽڵ�����:
���� 111.13.101.208 �Ļظ�: �ֽ�=32 ʱ��=28ms TTL=54

>>> os.linesep
'\r\n'
>>> os.name
'nt'

>>> os.stat('python')
os.stat_result(st_mode=16895, st_ino=562949953421355, st_dev=2625128013, st_nlink=1, st_uid=0, st_gid=0, st_size=0, st_atime=1518417380, st_mtime=1518417380, st_ctime=1517384433)
>>> os.path.join('root','test','t.py')
'root\\test\\t.py'
>>> os.getcwd()
'G:\\myProject'

os-import

2、sys模塊

 

sys.argv():傳入腳本參數
sys.exit(n):退出程序,正常退出時exit(0)
sys.version:獲取Python解釋程序的版本信息

>>> sys.version
'3.6.4 (v3.6.4:d48eceb, Dec 19 2017, 06:04:45) [MSC v.1900 32 bit (Intel)]'

>>>sys.maxsize  #最大的int值
2147483647

>>> sys.platform  #返回操做系統平臺名稱
'win32'

>>> sys.path  #返回模塊的搜索路徑,初始化時使用Python,path環境變量的值。
['C:\\Program Files\\JetBrains\\PyCharm 2017.3.4\\helpers\\pydev', 'C:\\Program Files\\JetBrains\\PyCharm 2017.3.4\\helpers\\pydev', 

>>> sys.stdin.read()  #從屏幕讀取多行??
>? hey
'hey\n'
>>> sys.stdin.readline()  #從屏幕讀取一行
>? hey
'hey\n'

>>>sys.getrecursionlimit()  #查看遞歸層數
1000

>>> sys.setrecursionlimit(1200)  #設置遞歸層數
>>> sys.getrecursionlimit()
1200
>>> sys.getfilesystemencoding()  #獲取內存數據存到文件裏的默認編碼
'utf-8'

 3、shutil模塊

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

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

將文件內容拷貝到另外一個文件中,能夠部份內容json

import shutil
f1 = open('經常使用模塊.py','r')
f2 = open('changyongmokuai.py','w')
shutil.copyfileobj(f1,f2)
View Code

 shutil.copyfile(src,dst)網絡

拷貝文件數據結構

shutil.copymode(src,dst)ide

僅拷貝權限。內容、組、用戶均不變函數

shutil.copystat(src,dst)ui

拷貝狀態的信息。包括:mode bits,atime,mtime,flags編碼

shutil.copy(src,dst)

拷貝文件和權限

shutil.copy2(src,dst)

拷貝文件和權限

shutil.ignore_patterns(*patterns)

shutil.copytree(src,dst,symlinks=False,ignore=None)

遞歸地去拷貝文件。不拷貝軟鏈接,ignore指定文件

如:shutil.copytree("packages","pack3",ignore=shutil.ignore_patterns("__init__.py","view.py"))

import shutil 
shutil.copytree('packages','pack')
View Code

 

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

遞歸的刪除文件

shutil.move(src,dst)

遞歸的移動文件

shutil.make_archive(base_name,format,...)

建立壓縮包並返回文件路徑,例如:zip、tar

  • base_name:壓縮包的文件名,也能夠是壓縮包的路徑。只是文件名時,則保存至當前目錄
  • format:壓縮包種類,"zip","tar"
  • root_dir:要壓縮的文件夾路徑(默認當前路徑)
  • owner:用戶,默認當前用戶
  • group:組,默認當前組
  • logger:用於記錄日誌,一般是logging.Logger對象

 

1 #將 /Users/wupeiqi/Downloads/test 下的文件打包放置當前程序目錄
2  
3 import shutil
4 ret = shutil.make_archive("wwwwwwwwww", 'gztar', root_dir='/Users/wupeiqi/Downloads/test')
5  
6  
7 #將 /Users/wupeiqi/Downloads/test 下的文件打包放置 /Users/wupeiqi/目錄
8 import shutil
9 ret = shutil.make_archive("/Users/wupeiqi/wwwwwwwwww", 'gztar', root_dir='/Users/wupeiqi/Downloads/test')
View Code

 shutil對壓縮包的處理是調用ZipFile和TarFile兩個模塊來進行的。

 

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()
z.close()
View Code

 

import tarfile

# 打包
tar = tarfile.open('your.tar','w')
tar.add('/Users/wupeiqi/PycharmProjects/bbs2.zip', arcname='bbs2.zip')
tar.add('/Users/wupeiqi/PycharmProjects/cmdb.zip', arcname='cmdb.zip')
tar.close()

# 解壓
tar = tarfile.open('your.tar','r')
tar.extractall()  # 可設置解壓地址
tar.close()
tar打包解壓

4、序列化

4.1 json

  • 序列化:序列化是指將內存中的數據類型轉化成字符串,以使其能存儲到硬盤或者經過網絡傳輸到遠程。由於硬盤存儲和網絡傳輸只能接受bytes。

json四個方法:

dump:序列化並寫入文件

dumps:只是序列化存在內存中

load:反序列化從內存中取出

loads:只是反序列化

import json
data = {
    'roles':[{'role':"monster"},{'role':'hero'}]
}
d = json.dumps(data)  #僅序列化
print(d)
d2 = json.loads(d)
print(d2)
f = open('json_file.json','w')
d = json.dump(data,f)  #序列化並存儲到文件
f = open('json_file.json','r')
d2 = json.load(f)
print(d2)
  •  只是把數據類型轉化成字符串存到內存裏的意義?
  1. 把你的內存數據經過網絡共享給遠程的其餘人
  2. 定義了不一樣語言的之間的交互規則:
    1. 純文本:缺點,不能共享複雜的數據類型
    2. XML:缺點,佔空間大
    3. json:簡單,可讀性好

4.2 pickle

pickle的用法和json徹底相同

json僅支持:str int tuple list dict 數據類型

pickle:支持Python裏的全部數據類型。可是隻能在Python裏使用。

 4.3 shelve

容許屢次dump和load

shellve對pickle進行封裝

#_*_coding:utf-8_*_
import shelve
f = shelve.open('shelve.test') #打開一個文件
names = ['pang','chao','cheng']
info = {'name':'alex','age':'22'}
f['names'] = names #持久化列表
f['new_dic'] = info
f.close()  #關閉文件
f = shelve.open('shelve.test')  #再次打開
print(f.items())
print(list(f.keys()))
print(list(f.items()))
print(f.get('names'))  #get方法
print(f['names'][0])   #按索引取值
f['names'] = 'shen' #修改直接整個賦值
f.close()
f = shelve.open('shelve.test')
print(f['names'])

 

5、xml模塊

xml是實現不一樣語言或程序之間進行數據交換的協議。跟json差很少,但json使用起來更簡單。至今還有不少傳統公司的接口仍是xml。

xml的格式以下,就是經過<>節點來區別數據結構的。

 

import xml.etree.ElementTree as ET
tree = ET.parse('xml test') #open
root = tree.getroot()  #f.seek(0),root-->data

print(root.tag)
#遍歷xml文檔
print(dir(root))
for child in root:  #child-->country 子節點
    # print(child)
    print('----',child.tag,child.attrib)  #子節點的tag attib
    for i in child:  # country下的子節點
        print(i.tag,i.text)
#修改
for node in root.iter('year'): #data.iter
    print(node.text) #year.text
    new_year = int(node.text) + 1
    node.text = str(new_year)
    node.set('update','yes')
tree.write('xml test')

#刪除node
for country in root.findall('country'):
    rank = int(country.find('rank').text)
    if rank > 50:
        root.remove(country)
tree.write('output.xml')

 6、configparser模塊

相關文章
相關標籤/搜索