本文首發於公衆號「AntDream」,歡迎微信搜索「AntDream」或掃描文章底部二維碼關注,和我一塊兒天天進步一點點windows
文件和目錄操做是很常見的功能,這裏作個簡單的總結,包括注意事項和實際的實現代碼,基本平常開發都夠用了bash
os.path.exists(path)
複製代碼
# 若是文件或是目錄不存在也會返回False
os.path.isfile(path)
os.path.isdir(path)
複製代碼
os.mkdir(path)
os.rmdir(path)
複製代碼
os.path.split(dir_path)[1]
複製代碼
這個方法既簡單又實用,好比咱們輸入一個目錄路徑:微信
os.path.split('/usr/projects/project1')[1]
# 輸出
project1
# 實際上,上面的代碼是分了2步走:
# 第1步:利用os.path.split方法分割路徑
os.path.split('/usr/projects/project1')
# 輸出
('/usr/projects', 'project1')
# 而後第2步取出第2個結果,也就是當前的目錄名字
複製代碼
循環遍歷目錄有2種方式,一種是常規的遞歸方法,相似下面這樣:網絡
def list_file(path):
for file in os.listdir(path):
if os.path.isdir(os.path.join(path, file)):
list_file(os.path.join(path, file))
print(file)
複製代碼
還有一種更好的方式就是用os.walk
方法,相似下面這樣:ui
def list_file_by_walk(dir_path):
for home, dirs, files in os.walk(dir_path):
print(home)
print(dirs)
# files中是文件列表
for file_name in files:
print(file_name)
複製代碼
os.walk
方法的幾個參數簡單介紹一下:spa
/usr/projects/
因此從上面的參數中能夠看出,os.walk
方法會逐一地遍歷初始目錄下面的全部目錄和文件指針
os.path.splitext(file_path)
複製代碼
這個方法若是輸入的是文件的路徑,好比:code
a = '/usr/projects/project1/test.txt'
os.path.splitext(a)
# 輸出
('/usr/projects/project1/test', '.txt')
# 因此跟上面相似,咱們能夠直接拿到文件的後綴
os.path.splitext(a)[1]
複製代碼
# 須要文件的目錄路徑和文件名
os.path.join(dir_name, file_name)
複製代碼
這個方法也頗有用,由於咱們在打開一個文件的時候都須要知道文件的路徑cdn
好比在上面循環遍歷目錄的例子中,咱們能夠這樣打開編輯文件:對象
def list_file_by_walk(dir_path):
for home, dirs, files in os.walk(dir_path):
print(home)
print(dirs)
# files中是文件列表
for file_name in files:
# 這個file_name只是一個文件名
print(file_name)
# 若是咱們須要打開文件進行編輯讀寫操做,那就須要文件的路徑
# 用os.path.join方法就能夠快速獲得文件路徑
file_path = os.path.join(home, file_name)
複製代碼
須要注意的是,不要直接用字符串相加的方式來拼接,這樣子會有兼容問題,好比windows上可能路徑就是錯的了
with open(file, 'r') as f:
for line in f.readlines():
print line
複製代碼
你們只要記住上面打開文件的格式就好了,也就是這句:
with open(file_path, 打開的模式) as f
# 咱們就拿到了文件對象f,能夠對文件進行操做了,好比讀寫等
複製代碼
緣由是文件讀寫是IO操做,須要及時關閉打開的文件,上述
with open() as f
的方式會自動幫你關閉文件的,省得本身忘記關
文件的打開模式有不少種,好比只讀、只寫、追加模式等等,具體能夠見下圖:
模式有這麼多,掌握常見的幾種就能夠了,其餘的等用到了再去了解。須要注意如下幾點:
# 只要這樣一句就建立了一個新文件,也就是打開之後關閉文件
with open(new_file, 'w') as f:
複製代碼
須要特別注意的是,以w
只寫模式打開一個文件後會把原文件的內容清除!因此若是在遍歷文件的時候,你想同時修改文件就不能簡單的以w
只寫模式打開了。
在遍歷文件的時候想同時修改文件怎麼辦呢?注意這裏說的是修改,好比修改某一行。
這裏舉例在遍歷文件的時候想修改文件,好比以上面遍歷目錄文件的例子:
def list_file_by_walk(dir_path):
for home, dirs, files in os.walk(dir_path):
print(home)
print(dirs)
# files中是文件列表
for file_name in files:
# 這個file_name只是一個文件名
print(file_name)
# 若是咱們須要打開文件進行編輯讀寫操做,那就須要文件的路徑
# 用os.path.join方法就能夠快速獲得文件路徑
file_path = os.path.join(home, file_name)
# 這個時候我想修改這個文件的內容,要怎麼作呢?
複製代碼
須要注意的是,
讀寫
模式須要管理文件指針,比較麻煩,寫讀
模式,則會把原先的內容都清除,因此都不適合
一種思路是我先以只讀
模式打開,而後遍歷文件的內容保存起來,好比:
with open(file, 'r') as f:
for line in f.readlines():
print line
# 這裏就能夠把文件的內容一行行保存起來
# 找到須要修改的行,修改之後保存
複製代碼
保存之後再以只讀
模式打開文件,寫入便可。
另外一種思路是我打開原文件的同時,再打開另外一個臨時文件用於寫入,好比這樣:
with open(file, 'r') as f, open(cache_file_path, 'w') as w:
for line in f.readlines():
# 中間能夠對f文件中的內容進行過濾或是修改
w.write(line)
# 完了之後須要刪除原文件,而後把臨時文件的名字修改爲原來文件的名字便可
複製代碼
這裏就順道引出了,刪除和重命名文件的方法
os.remove(file)
os.rename(cache_file_path, file)
複製代碼
以上就是Python文件和目錄操做的經常使用知識點和方法總結,建議你們收藏起來,之後方便隨時查看。
歡迎關注個人公衆號查看更多精彩文章!
複製代碼