今天寫乙個在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 = o程式設計客棧s.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指明遍歷的順序)
該方法對於每個目錄返回乙個三元組,(dirpambfvdcklth, 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()方法還原完整路徑。
遍歷搞定之後,檔名的修改可以使用正規表示式做一些高階的處理。
另外,還可以使用os.system(cmd)來呼叫shell裡面的相關命令對檔案進行處理,很好很強大。
本文標題: python中遍歷檔案的3個方法
本文位址: /jiaoben/python/113083.html
Python 3 x讀寫csv檔案中數字的方法示例
前言 讀寫csv檔案 讀檔案時先產生str的列表,把最後的換行符刪掉 然後乙個個str轉換成int 讀寫csv檔案 csv file datas.csv csv open csv file,w for i in range 1,20 csv.write str i if i 10 0 csv.wri...
集合遍歷python 遍歷Python中的集合
在本文中,我們將學習在python 3.x中對集合進行遍歷 遍歷。或更早。它是物件的無序集合,沒有任何重複。這可以通過將所有元素括在花括號內來完成。我們還可以通過關鍵字 set 使用型別轉換來形成集合。方法1 使用沒有索引的可迭代 示例set inp iterate over the set for...
Python3實現從檔案中讀取指定行的方法
from python的標準庫linecache模組非常適合這個任務 import linecache the line linecache.getline d freakout.cpp 222 print the line linecache讀取並快取檔案中所有的文字,若檔案很大,而唯讀一行,則效...