兩種方式:
1.使用python對文件操作的方法
2.將命令放在控制臺執(zhí)行(commands模塊等)
這里就介紹python對文件操作的方法吧,第二種方式其實就是針對不同的操作系統(tǒng)维哈,執(zhí)行相應(yīng)的命令啦
文件及文件夾是否存在
1.判斷文件是否存在
os.path.exists(r'C:\1.TXT')
os.path.isfile('d:/assist') ? #既可以判斷文件是否存在,有空判斷是否為文件
2.判斷文件夾是否存在
os.path.exists(r'C:\1\')
os.path.isdir(r'C:\1\')
文件及文件夾的創(chuàng)建
1.創(chuàng)建文件
f = open(new_path_filename, 'w')
f.close()
2.創(chuàng)建文件夾
os.makedirs(path) ? #級聯(lián)創(chuàng)建结耀,如果父目錄不存在的話
os.mkdir(path) ? #父目錄不存在就創(chuàng)建失敗
文件及文件夾的刪除
1砂竖、刪除文件
os.remove(filename)
2.刪除文件夾
①文件夾為空
os.rmdir()
②文件夾非空:python的自帶的方法太麻煩了(級聯(lián)刪除)么介,還是使用控制臺來刪除吧,例如
commands.getstatusoutput("rm -r 目錄")
前輩的:
import shutil
shutil.rmtree()
讀寫文件
1.讀文件丽声。(打開模式見附錄)
① 使用try語句塊來打開文件是一個好習(xí)慣礁蔗,因為文件打開錯誤或者讀取結(jié)束,都應(yīng)該用finally關(guān)閉文件流雁社。
try:
? ? file = open("hello.bin","rb")
? ? file.read() ? ?#read()讀取全部內(nèi)容
? ? file.read(size)
? ? file.readlines() ? ?#以整行的方式讀取全部
finally:
? ? if file:
? ? ? ? file.close()
注意:要讀取非ASCII編碼的文本文件瘦麸,就必須以二進(jìn)制模式打開,再解碼歧胁。比如GBK編碼的文件:
f = open('/Users/michael/gbk.txt','rb')
u = f.read().decode('gbk')
可以使用python的codecs模塊滋饲,將轉(zhuǎn)碼和打開文件放在一起
import codecs
with ?codecs.open('/Users/michael/gbk.txt','r','gbk') as f: ??
? ? f.read() ? ?# u'\u6d4b\u8bd5'
②使用with語句塊來打開文件厉碟。見上面
推薦用with語句塊,因為可以代替復(fù)雜的try-finally語句塊屠缭。同時箍鼓,with語句塊并不是只能對文件對象使用,它的使用條件是這樣的:
1)with后面的方法返回的對象需要有__enter__()呵曹、__exit__(type,value,trace)方法
2)具體可以參考這篇文章噢
2.寫文件
重要的都在讀文件中寫了款咖,寫文件就是file的write方法啦
with ?open('/Users/michael/test.txt','w') ?as ?f: ??
? ? ? f.write('Hello, world!')
獲取文件和目錄路徑
1.獲取當(dāng)前文件全路徑
__file__ ? #方便嗎
os.path.realpath(".")
os.path.abspath(".")
#F:\www\python\test\open\hello.txt
2.獲取當(dāng)前文件所在目錄的全路徑路徑
os.getcwd()
os.path.split(__file__)[0] ?#好麻煩呀
os.path.dirname(__file__) ?#好麻煩啊
#F:\www\python\test\open
3.獲取當(dāng)前文件所在目錄的上級目錄的全路徑
os.path.abspath(os.path.join(os.getcwd(),"..")) ?#還想繼續(xù)上溯的話,繼續(xù)添加“..”即可
#F:\www\python\test
4.獲取文件的后綴名
os.path.splitext('/path/to/file.txt')
遍歷某個文件夾
1.深度優(yōu)先遍歷
import os
def?Test2(rootDir):
? ? for?lists?in?os.listdir(rootDir):
? ? ? ? path=os.path.join(rootDir,?lists)
? ? ? ? print?path ? ? ? #如果只需要當(dāng)前目錄的文件和文件夾奄喂,那么下面兩行就不需要了
? ? ? ? if?os.path.isdir(path):
? ? ? ? ? ? Test2(path)
2.廣度優(yōu)先遍歷
import ?os
def Test1(rootDir):
? ? list_dirs?=?os.walk(rootDir)
? ? for ?tup ?in ?list_dirs:
? ? ? ? for d in f[1]:
? ? ? ? ? ? ?print os.path.join(root,?d)
? ? ? ?for f in tup[2]:
? ? ? ? ? ? ?printos.path.join(root,?f)
注意os.walk(目錄)返回的是包含三個元素的tuple的生成器铐殃,該tuple=(root,dirs跨新,files)富腊,root代表當(dāng)前目錄,dirs代表當(dāng)前目錄中所有直接子目錄的列表域帐,files代表當(dāng)前中所有直接子文件的列表赘被。
附錄
文件讀寫模式
1、r 打開只讀文件肖揣,該文件必須存在民假。
2、r+ 打開可讀寫的文件龙优,該文件必須存在羊异。
3、w 打開只寫文件彤断,若文件存在則文件長度清為0野舶,即該文件內(nèi)容會消失。若文件不存在則建立該文件瓦糟。
4筒愚、w+ 打開可讀寫文件赴蝇,若文件存在則文件長度清為零鄙才,即該文件內(nèi)容會消失援制。若文件不存在則建立該文件。
5、a 以附加的方式打開只寫文件遍略。若文件不存在,則會建立該文件杏死,如果文件存在厢岂,寫入的數(shù)據(jù)會被加到文件尾,即文件原先的內(nèi)容會被保留楚堤。
6疫蔓、a+ 以附加方式打開可讀寫的文件含懊。若文件不存在,則會建立該文件衅胀,如果文件存在岔乔,寫入的數(shù)據(jù)會被加到文件尾后,即文件原先的內(nèi)容會被保留滚躯。
7雏门、上述的形態(tài)字符串都可以再加一個b字符,如rb掸掏、w+b或ab+等組合茁影,加入b 字符用來告訴函數(shù)庫打開的文件為二進(jìn)制文件,而非純文字文件丧凤。