python遍歷目錄的4種方法(python中遍歷文件)

本文目錄一覽:

Python中如何遍歷指定目錄下的所有文件?

例如:在C:\TDDOWNLOAD目錄下有a.txt、b.txt兩個文件,另有\sub1子文件夾,C:\TDDOWNLOAD\sub1下又有c.txt、d.txt兩個文件。 1. os.walk os.walk()返回一個三元素的tuple:當前路徑、子文件夾名稱、文件列表。 import os def fun( path ):… for root, dirs, files in os.walk( path ):… for fn in files:… print root, fn… fun( r’C:\TDDOWNLOAD’ )C:\TDDOWNLOAD a.txtC:\TDDOWNLOAD b.txtC:\TDDOWNLOAD\sub1 c.txtC:\TDDOWNLOAD\sub1 d.txt 2. glob.glob glob.glob()只接受一個參數,這個參數既代有路徑,又代有匹配模式,返回值為一個列表。注意,glob.glob()無法直接穿透子文件夾,需要自己處理: def fun( path ):… for fn in glob.glob( path + os.sep + ‘*’ ): # ‘*’代表匹配所有文件… if os.path.isdir( fn ): # 如果結果為文件夾… fun( fn ) # 遞歸… else:… print fn… fun( r’C:\TDDOWNLOAD’ )C:\TDDOWNLOAD\a.txtC:\TDDOWNLOAD\b.txtC:\TDDOWNLOAD\sub1\c.txtC:\TDDOWNLOAD\sub1\d.txt ‘*’為匹配模式,代表匹配所有文件,只有這樣才能將子文件夾查出來,以便遞歸深入,探查下一層的文件。

如何用Python實現目錄遍歷

1. 基本實現

[root@localhost ~]# cat dirfile.py

import os

path=’/tmp’

for dirpath,dirnames,filenames in os.walk(path):

for file in filenames:

fullpath=os.path.join(dirpath,file)

print fullpath

執行結果如下:

[root@localhost ~]# python dirfile.py

/tmp/yum.log

/tmp/pulse-3QSA3BbwpQ49/pid

/tmp/pulse-3QSA3BbwpQ49/native

/tmp/.esd-0/socket

Python其實很簡單 第十六章 目錄管理

為實現“按名存取”,必須建立文件名與輔存空間中物理地址的對應關係,體現這種對應關係的數據結構稱為文件目錄。文件目錄表目至少要包含文件名、文件的類型、文件的長度、訪問權限、建立時間、訪問時間和文件存儲地址等內容。通過前面一章的介紹,我們已經知道在文件信息中已經包含了文件名、文件類型訪問權限等信息,而存儲地址的信息則包含在目錄信息中。

16.1路徑

路徑通常用一個字符串來表示,可以按照路徑信息定位到一個目錄或文件。如:“C:UsersAdministratorPictures1.jpg”這個信息可以非常方便的找到這個圖片文件,“C:UsersAdministratorPictures”這個信息可以幫助我們找到更多的圖片文件。

這裡所說的“路徑”和上網時碰到的“地址”含義比較相似,互聯網就相當於將個人電腦可以訪問的範圍擴大了,互聯網中的地址也是對應某一個存儲空間的路徑,按照地址可以訪問互聯網上的信息,就如同按照路徑可以找到計算機中的文件一樣。

在Python中,可以導入 os模塊 來進行目錄操作。

1、獲取當前工作目錄getcwd()函數

例:

import os

print(os.getcwd())

運行結果:

C:UsersAdministratorAppDataLocalProgramsPythonPython38

這個路徑是當前Python IDLE所在的地址。

2、獲取文件的絕對路徑abspath()函數

abspath()函數是os模塊的子模塊path提供的一個函數。用法舉例如下:

import os

print(os.path.abspath(r’test.txt’))

運行結果:

C:UsersAdministratorAppDataLocalProgramsPythonPython38 est.txt

16.2 目錄操作類函數

1、判斷目錄是否存在exists()函數

exists()函數是os模塊的子模塊path中的函數。使用方法舉例如下:

import os

print(os.path.exists(r’C:UsersAdministratorPictures1.jpeg’))

輸出結果:

True

2、創建目錄mkdir()函數和makedirs()函數

mkdir()函數和makedirs()函數都是由os模塊提供的,下面舉例說明用法和區別。

例1:

import os

path=’d:test’

if not os.path.exists(path):

os.makedirs(path)

print(‘該文件目錄創建成功!’)

如果目錄d: est已存在,則不再創建;若不存在,則創建。

例2:

import os

path=’d:testtest1test11′

if not os.path.exists(path):

os.makedirs(path)

print(‘該文件目錄創建成功!’)

雖然目錄d: est已存在,但可以在其下繼續創建子目錄。上面的代碼可以成功地創建d: est est1 est11目錄。

mkdir()函數和makedirs()函數用法基本一樣,不同之處在於mkdir()函數只能能創建一級目錄。

3、刪除目錄函數rmdir()函數

rmdir()函數是由os模塊提供的。

例如:通過上面的例子已經建立了d: est est1 est11目錄,現在去刪除子目錄test11(此子目錄為空目錄),代碼如下:

import os

os.rmdir(‘d:testtest1test11’)

如果要刪除的目錄非空(其下還包含有文件或文件夾),則不能刪除,並且出現Windows文件操作錯誤的提示(Python是調用操作系統命令完成文件和目錄操作的)。譬如d: est目錄下含有有子目錄,則不能對其進行如下刪除操作。

import os

os.rmdir(‘d:test’)

此時,會出現如下錯誤提示:

Traceback (most recent call last):

File “C:/Users/zym/AppData/Local/Programs/Python/Python39/4.py”, line 10, in

os.rmdir(‘d:test’)

OSError: [WinError 145] 目錄不是空的。: ‘d:test’

4、刪除非空目錄函數rmtree()函數

rmtree()函數是由Python內置的標準模塊shutil提供的,可以刪除目錄及目錄下的文件和子目錄。如刪除d: est目錄及其下的子目錄和文件,可用如下代碼:

import shutil

shutil.rmtree(‘d:test’)

5、遍歷目錄walk()函數

walk()函數是由os模塊提供的。

語法格式:

os.walk(top[, topdown=True[, onerror=None[, followlinks=False]]])

其中,top是所要遍歷的目錄的地址;topdown為可選參數,為 True時自上而下遍歷 目錄,為False時自下而上遍歷目錄,默認值為True;onerror為可選參數,用於指定異常處理方式,默認為忽略;followlinks為可選參數,如果為 True,則會遍歷目錄下的快捷方式(linux 下是軟連接 symbolic link )實際所指的目錄(默認關閉),如果為 False,則優先遍歷 top 的子目錄。

該函數的返回值為一個三元組(root,dirs,files)。root 所指的是當前正在遍歷的這個文件夾的本身的地址;dirs 是一個 list ,內容是該文件夾中所有的目錄的名字(不包括子目錄);files 同樣是 list , 內容是該文件夾中所有的文件(不包括子目錄)。

例:遍歷d: est目錄及其子目錄下的所有子目錄和文件:

d: est目錄及其下的子目錄和文件

import os

path=’d:test’

tups=os.walk(path) # 函數walk()的返回值為三元組

for root,dirs,files in tups: # 遍歷這個三元組

for name in dirs: #遍歷存放目錄值的元組

print(‘dir:’,os.path.join(root,name))

for name in files: #遍歷存放文件名值的元組

print(‘file:’,os.path.join(root,name))

運行結果如下:

dir: d: est est1

dir: d: est est1 est11

dir: d: est est1新建文件夾

file: d: est est1新建文本文檔.txt

file: d: est est1 est11新建文本文檔.txt

如何利用Python遍歷文件夾

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怎麼遍歷一個目錄下的所有目錄

path = ‘./’

for parent, dirnames, filenames in os.walk(path):

parent就是父級目錄

dirnames就是該目錄下面的子目錄

filenames就是該目錄下面的文件

python遍歷目錄就是這麼簡單

有時我們有列出目錄下都有哪些文件和子目錄的需求,這種情況是有現成命令可用的,比如windows下的dir命令,linux下的ls命令都可以,那我們用python代碼怎麼實現呢?

我們利用python豐富的庫很容易就能實現一個簡易版本,下面我們就用4種方法來實現它。

一、使用os.popen

os.popen工作原理是新建一個子進程,然後用這個子進程執行命令,父進程與子進程間通過管道進行通信。

根據調用popen時的傳參,我們可以通過管道讀取子進程的輸出也可以向子進程寫數據,默認是讀取子進程的輸出。

從以上描述可以看出popen是非常通用的,不是只能用於我們這個例子哦。

那我們開始用它實現我們的需求吧,代碼如下:

哈哈,是不是很簡單,這種方式雖然能達到目的但其實並不是我們想要的,我們本來就是要實現ls的,結果調用了ls,所以嚴格意義上來說我們並沒有實現ls,那讓我們繼續往下看其它方法吧,嘿嘿。

二、使用glob.glob

glob可以根據你使用的通配符對文件進行匹配,利用這個特性我們可以列出當前目錄下都有哪些文件和子目錄,如下代碼:

三、使用os.listdir

os.listdir同樣可以列出某個目錄下都有哪些文件和子目錄,如下代碼:

四、使用os.walk

os.walk在遍歷目錄方面非常強大,它不但可以遍歷你需要的目錄,也可以遞歸遍歷子目錄且遞歸的深度可以用代碼控制,下面讓我們分別看下怎麼遍歷整個目錄樹以及怎麼控制深度吧。

os.walk默認是遍歷整個目錄樹的,如下代碼就會遞歸打印出當前目錄下所有文件:

那我們怎麼控制遍歷的深度,比如只遍歷n層呢?其實很簡單,只需要定義一個深度變量,然後到達n後跳出循環即可,如下代碼就只遍歷1層:

至此我們已經寫完4種方法了,如果你還有其他方法,歡迎評論交流。

原創文章,作者:小藍,如若轉載,請註明出處:https://www.506064.com/zh-hant/n/295210.html

(0)
打賞 微信掃一掃 微信掃一掃 支付寶掃一掃 支付寶掃一掃
小藍的頭像小藍
上一篇 2024-12-26 17:15
下一篇 2024-12-26 17:15

相關推薦

發表回復

登錄後才能評論