Python遍歷資料夾的兩種方法比較

2021-08-10 06:52:13 字數 3874 閱讀 7134

模組os中的walk()函式可以遍歷資料夾下所有的檔案。

[python]

view plain

copy

os.walk(top, topdown=ture, οnerrοr=

none

, followlinks=

false

)  

該函式可以得到乙個三元tupple(dirpath, dirnames, filenames).

引數含義:

注意,dirnames和filenames均不包含路徑資訊,如需完整路徑,可使用os.path.join(dirpath, dirnames)

下面給出**;

[python]

view plain

copy

# -*- coding: utf-8 -*- 

import

os  

deffile_name(file_dir):   

forroot, dirs, files 

inos.walk(file_dir):  

print

(root) 

#當前目錄路徑

print

(dirs) 

#當前路徑下所有子目錄

print

(files) 

#當前路徑下所有非目錄子檔案

當需要特定型別的檔案時,**如下:

[python]

view plain

copy

# -*- coding: utf-8 -*- 

import

os  

deffile_name(file_dir):   

l=   

forroot, dirs, files 

inos.walk(file_dir):  

forfile 

infiles:  

ifos.path.splitext(file)[

1] == 

'.jpeg'

:  return

l  

os.listdir()函式得到的是僅當前路徑下的檔名,不包括子目錄中的檔案,所有需要使用遞迴的方法得到全部檔名。

直接給出**,函式將返回型別為『.jpeg』個檔名:

[python]

view plain

copy

# -*- coding: utf-8 -*-

import

os  

deflistdir(path, list_name):  

forfile 

inos.listdir(path):  

file_path = os.path.join(path, file)  

ifos.path.isdir(file_path):  

listdir(file_path, list_name)  

elif

os.path.splitext(file_path)[

1]==

'.jpeg'

:  

遍歷資料夾是乙個很常用的功能吧。這裡分別用兩種方法實現: 

第一種:使用os.walk:

# -*- coding: utf-8 -*-

import

os def

test1(rootdir): 

list_dirs = os.walk(rootdir) 

forroot, dirs, files 

inlist_dirs: 

ford 

indirs: 

print

os.path.join(root, d)      

forf 

infiles: 

print

os.path.join(root, f) 

第二種:使用os.listdir:

# -*- coding: utf-8 -*- 

import os 

def test2(rootdir): 

for lists in os.listdir(rootdir): 

path

= os

.path.join(rootdir, lists) 

print path 

if os.path.isdir(path): 

test2(path) 

這兩種到底有什麼區別呢?

這裡先建立乙個測試目錄e:\test,目錄結構如下:

e:\test 

│--a 

│  │--a-a 

│  │  │--a-a-a.txt 

│  │--a-b.txt 

│  │--a-c 

│  │  │--a-b-a.txt 

│  │--a-d.txt 

│--b.txt 

│--c 

│  │--c-a.txt 

│  │--c-b.txt 

│--d.txt 

│--e 

下面通過執行如下**:

test1(

'e:\test'

) print

'***********************************===='

test2('e:\test'

)

輸出結果為:

>>>  

e:\test\a 

e:\test\c 

e:\test\e 

e:\test\b.txt 

e:\test\d.txt 

e:\test\a\a-a 

e:\test\a\a-c 

e:\test\a\a-b.txt 

e:\test\a\a-d.txt 

e:\test\a\a-a\a-a-a.txt 

e:\test\a\a-c\a-b-a.txt 

e:\test\c\c-a.txt 

e:\test\c\c-b.txt 

***********************************==== 

e:\test\a 

e:\test\a\a-a 

e:\test\a\a-a\a-a-a.txt 

e:\test\a\a-b.txt 

e:\test\a\a-c 

e:\test\a\a-c\a-b-a.txt 

e:\test\a\a-d.txt 

e:\test\b.txt 

e:\test\c 

e:\test\c\c-a.txt 

e:\test\c\c-b.txt 

e:\test\d.txt 

e:\test\e 

>>>  

可以看出,對於第一種方法,輸出總是先資料夾後檔名的,對於第二種,則是按照目錄樹結構以及按照首字母排序進行輸出的。

另外之前列印出的目錄樹其實就是通過對第二種方法進行稍微修改實現的,如下:

def

test3(rootdir, level=

1): 

iflevel==1: 

print

rootdir 

forlists 

inos.listdir(rootdir): 

path = os.path.join(rootdir, lists) 

print

'│  '

*(level-1)+

'│--'

+lists 

ifos.path.isdir(path): 

test3(path, level+1

)

python刪除資料夾的兩種方式

os提供的rmdir 函式和removedirs 函式只能刪除空資料夾,這裡提供兩種方法,能夠刪除整個資料夾 import os defdelete dir root dirlist os.listdir root 返回dir資料夾裡的所有檔案列表 for f in dirlist filepath...

Python遍歷資料夾的兩種方法比較

遍歷資料夾是乙個很常用的功能吧。這裡分別用兩種方法實現 coding utf 8 import os def test1 rootdir list dirs os.walk rootdir for root,dirs,files in list dirs for d in dirs print os...

python 遍歷資料夾

在python中,檔案操作主要來自os模組,主要方法如下 os.listdir dirname 列出dirname下的目錄和檔案 os.getcwd 獲得當前工作目錄 os.curdir 返回當前目錄 os.chdir dirname 改變工作目錄到dirname os.path.isdir nam...