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'
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'
高級的文件、文件夾、壓縮包處理模塊python
shutil.copyfileobj(fsrc,fdst[,length])shell
將文件內容拷貝到另外一個文件中,能夠部份內容json
import shutil f1 = open('經常使用模塊.py','r') f2 = open('changyongmokuai.py','w') shutil.copyfileobj(f1,f2)
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')
shutil.rmtree(path[,ignore_errors[,onerror]])
遞歸的刪除文件
shutil.move(src,dst)
遞歸的移動文件
shutil.make_archive(base_name,format,...)
建立壓縮包並返回文件路徑,例如:zip、tar
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')
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()
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()
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)
pickle的用法和json徹底相同
json僅支持:str int tuple list dict 數據類型
pickle:支持Python裏的全部數據類型。可是隻能在Python裏使用。
容許屢次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'])
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')