python中遍曆檔案的3個方法_python

來源:互聯網
上載者:User

今天寫一個在windows下批量修改檔案名稱的python指令碼,用到檔案的遍曆。用python進行檔案遍曆有多種方法,這裡列舉並說明一下。

os.path.walk()

這是一個傳統的用法。

walk(root,callable,args)方法有三個參數:要遍曆的目錄,回呼函數,回呼函數的參數(元組形式)。

調用的過程是遍曆目錄下的檔案或目錄,每遍曆一個目錄,調用回呼函數,並把args作為參數傳遞給回呼函數。

回呼函數定義時也有三個參數,比如樣本中的func中的三個參數,分別為walk傳來的參數、目錄的路徑、目錄下的檔案清單(只有檔案名稱,不是完整路徑)。請看樣本:

複製代碼 代碼如下:

import os
s = os.sep #根據unix或win,s為\或/
root = "d:" + s + "ll" + s #要遍曆的目錄

def func(args,dire,fis): #回呼函數的定義
    for f in fis:
        fname = os.path.splitext(f)  #分割檔案名稱為名字和副檔名的二元組
        new = fname[0] + 'b' + fname[1]  #改名字
        os.rename(os.path.join(dire,f),os.path.join(dire,new)) #重新命名

os.path.walk(root,func,()) #遍曆

這種方法在使用時有個問題,不能遞迴遍曆下一層(這點我還不確定,歡迎指正)。

python的進階版本中加入了os.walk(),比這個好用。

os.walk()

原型為:os.walk(top, topdown=True, onerror=None, followlinks=False)

我們一般只使用第一個參數。(topdown指明遍曆的順序)
該方法對於每個目錄返回一個三元組,(dirpath, dirnames, filenames)。第一個是路徑,第二個是路徑下面的目錄,第三個是路徑下面的非目錄(對於windows來說也就是檔案)。請看樣本:

複製代碼 代碼如下:

import os
s = os.sep
root = "d:" + s + "ll" + s 

for rt, dirs, files in os.walk(root):
    for f in files:
        fname = os.path.splitext(f)
        new = fname[0] + 'b' + fname[1]
        os.rename(os.path.join(rt,f),os.path.join(rt,new))

這種方式可以遞迴遍曆所有的檔案。

listdir

可以使用os模組下的幾個方法組合起來進行遍曆。請看樣本:

複製代碼 代碼如下:

import os
s = os.sep
root = "d:" + s + "ll" + s

for i in os.listdir(root):
    if os.path.isfile(os.path.join(root,i)):
        print i

這裡需要注意的是,其中的i是目錄或檔案名稱,不是完整的路徑,在使用時要結合os.path.join()方法還原完整路徑。

遍曆搞定之後,檔案名稱的修改可以使用Regex做一些進階的處理。

另外,還可以使用os.system(cmd)來調用shell裡面的相關命令對檔案進行處理,很好很強大。

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.