国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁(yè) > 編程 > Python > 正文

python中遍歷文件的3個(gè)方法

2020-02-23 05:45:22
字體:
來(lái)源:轉(zhuǎn)載
供稿:網(wǎng)友

今天寫一個(gè)在windows下批量修改文件名的python腳本,用到文件的遍歷。用python進(jìn)行文件遍歷有多種方法,這里列舉并說(shuō)明一下。

os.path.walk()

這是一個(gè)傳統(tǒng)的用法。

walk(root,callable,args)方法有三個(gè)參數(shù):要遍歷的目錄,回調(diào)函數(shù),回調(diào)函數(shù)的參數(shù)(元組形式)。

調(diào)用的過(guò)程是遍歷目錄下的文件或目錄,每遍歷一個(gè)目錄,調(diào)用回調(diào)函數(shù),并把a(bǔ)rgs作為參數(shù)傳遞給回調(diào)函數(shù)。

回調(diào)函數(shù)定義時(shí)也有三個(gè)參數(shù),比如示例中的func中的三個(gè)參數(shù),分別為walk傳來(lái)的參數(shù)、目錄的路徑、目錄下的文件列表(只有文件名,不是完整路徑)。請(qǐng)看示例:
代碼如下:
import os
s = os.sep #根據(jù)unix或win,s為/或/
root = "d:" + s + "ll" + s #要遍歷的目錄

def func(args,dire,fis): #回調(diào)函數(shù)的定義
    for f in fis:
        fname = os.path.splitext(f)  #分割文件名為名字和擴(kuò)展名的二元組
        new = fname[0] + 'b' + fname[1]  #改名字
        os.rename(os.path.join(dire,f),os.path.join(dire,new)) #重命名

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

這種方法在使用時(shí)有個(gè)問(wèn)題,不能遞歸遍歷下一層(這點(diǎn)我還不確定,歡迎指正)。

python的高級(jí)版本中加入了os.walk(),比這個(gè)好用。

os.walk()

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

我們一般只使用第一個(gè)參數(shù)。(topdown指明遍歷的順序)
該方法對(duì)于每個(gè)目錄返回一個(gè)三元組,(dirpath, dirnames, filenames)。第一個(gè)是路徑,第二個(gè)是路徑下面的目錄,第三個(gè)是路徑下面的非目錄(對(duì)于windows來(lái)說(shuō)也就是文件)。請(qǐng)看示例:
代碼如下:
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模塊下的幾個(gè)方法組合起來(lái)進(jìn)行遍歷。請(qǐng)看示例:

代碼如下:
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是目錄或文件名,不是完整的路徑,在使用時(shí)要結(jié)合os.path.join()方法還原完整路徑。

遍歷搞定之后,文件名的修改可以使用正則表達(dá)式做一些高級(jí)的處理。

發(fā)表評(píng)論 共有條評(píng)論
用戶名: 密碼:
驗(yàn)證碼: 匿名發(fā)表
主站蜘蛛池模板: 中山市| 金堂县| 宜章县| 松阳县| 苍梧县| 大石桥市| 天门市| 安化县| 石阡县| 福州市| 九台市| 涟水县| 宜阳县| 荥经县| 临夏县| 临汾市| 昔阳县| 武川县| 游戏| 白水县| 肥乡县| 新巴尔虎右旗| 金塔县| 尉氏县| 石阡县| 桃园市| 莱西市| 东乡族自治县| 石屏县| 浮山县| 茌平县| 通江县| 新兴县| 崇州市| 天门市| 深泽县| 衢州市| 青海省| 林口县| 蓝山县| 岳池县|