python中i/o相關(guān)的模塊是os,os.path模塊,shutil模塊是對os模塊的擴(kuò)展潭陪,也包含了很多實用的函數(shù)(例如:copyfile)雄妥。
1 打開一個文件
open(file, mod)
file是打開的文件的路徑,mod是打開文件的方式['r', 'rb', 'w', 'a']依溯,如果文件不存在老厌,會拋出IOError異常。成功打開文件后黎炉,返回文件的句柄
2 讀取文件的內(nèi)容
fd.read(size)
如果不傳size,將讀取整個文件的信息枝秤。
fd.readline()
讀取一行
fd.readlines()
按行讀取整個文件,所有的行放在一個list中返回
3 文件中寫入內(nèi)容
fd.write(content)
4 關(guān)閉文件
fd.close()
可以在打開文件時使用with關(guān)鍵字,它會幫我們自動的關(guān)閉文件:
with open(path, 'r') as f:
? ? // do something
5 目錄操作
os.path.isdir(path) 判斷一個文件是不是目錄
os.path.isfile(path) 判斷一個文件是不是文件
os.path.listdir(path)掃描path下的所有的文件和目錄,返回一個list
os.path.abspath(path) 返回一個相對路徑的全路徑
os.path.join(path,file/path) 根據(jù)系統(tǒng)的文件路徑分隔符拼接路徑
os.mkdir(path) 創(chuàng)建一個路徑
os.rmdir(path) 刪除一個路徑
os.path.split(path) 講一個文件拆分成一個路徑和最后的文件部分三椿,例如path=/aa/bb/x.txt,將返回('/aa/bb', 'x.txt') 返回的是一個tuble
os.path.splitext(filename) 將一個文件名拆分成名稱和文件后綴的兩部分,例如:filename=x.txt,
將返回:(‘x’, '.txt') 返回的是一個tuble垦页。
6 shutil 模塊的高級API
copyfile( src, dst)
從源src復(fù)制到dst中去。當(dāng)然前提是目標(biāo)地址是具備可寫權(quán)限干奢。拋出的異常信息為IOException. 如果當(dāng)前的dst已存在的話就會被覆蓋掉
copymode( src, dst)
只是會復(fù)制其權(quán)限其他的東西是不會被復(fù)制的
copystat( src, dst)
復(fù)制權(quán)限、最后訪問時間盏袄、最后修改時間
copy( src, dst)
復(fù)制一個文件到一個文件或一個目錄
copy2( src, dst)
在copy上的基礎(chǔ)上再復(fù)制文件最后訪問時間與修改時間也復(fù)制過來了忿峻,類似于cp –p的東西
copy2( src, dst)
如果兩個位置的文件系統(tǒng)是一樣的話相當(dāng)于是rename操作,只是改名辕羽;如果是不在相同的文件系統(tǒng)的話就是做move操作
copytree(olddir,newdir,True/Flase)
把olddir拷貝一份newdir逛尚,如果第3個參數(shù)是True,則復(fù)制目錄時將保持文件夾下的符號連接刁愿,如果第3個參數(shù)是False绰寞,則將在復(fù)制的目錄下生成物理副本來替代符號連接
7 序列化和反序列化
主要是cPickle,pickle铣口, json模塊滤钱,cPickle模塊是用c語言編寫的模塊,pickle是純python編寫的脑题,所有理論上cPickle模塊要比pickle模塊快件缸。我們在import時可以醬紫導(dǎo)入:
try:
? ? import cPickle as pickle
except ImportError:
? ? import pickle
將一個python數(shù)據(jù)對象序列化成字符串,可以醬紫:
d = {'name':'jason', 'age':18}
pickle.dumps(d),這樣會返回序列化后的字符串叔遂,如果想直接將序列化后的字符串寫入文件的話他炊,可以醬紫:pickle.dump(d, fd),fd 為打開的文件句柄争剿,當(dāng)然文件應(yīng)該具有寫的權(quán)限。
反序列化的話就調(diào)用loads(從序列化的字符串中恢復(fù)對象)或load(從一個文件中恢復(fù)對象)痊末,例如:d = pickle.loads(str),d = pickle.load(fd)
json格式的序列化
json格式是不同系統(tǒng)間數(shù)據(jù)交互的最常見的數(shù)據(jù)格式了,python中有一個json模塊蚕苇,支持?jǐn)?shù)據(jù)對象和json數(shù)據(jù)間的轉(zhuǎn)化。
dumps()方法將一個python數(shù)據(jù)對象(dict,list)序列化成json字符串
d = dict(name="jason", age=18)
json.dumps(d) // {"name": "jason", "age": 18}
loads()方法凿叠,從一個json格式的字符串中導(dǎo)出python數(shù)據(jù)對象
json.dump('{"name": "jade", "age": 18}') // {u"name": u"jade", u"age": 18}
注意loads導(dǎo)出時涩笤,所有的字符串將會變成unicode編碼