python中遍歷檔案的3個方法

2022-09-27 08:24:13 字數 1828 閱讀 5704

今天寫乙個在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讀取並快取檔案中所有的文字,若檔案很大,而唯讀一行,則效...