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
2. 在上例的基礎上傳遞參數
import os,sys
path=sys.argv[1]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
在這里,sys.argv[1]是接受參數,也可以定義sys.argv[2]接受第二個參數
3. 如何用函數實現
PS:
1> def __init__():函數,也叫初始化函數。
self.path = path可以理解為初始化定義了1個變數。 在後面的def裡面調用的時候必須要使用self.path而不能使用path
2>__name__ == '__main__'
模塊是對象,並且所有的模塊都有一個內置屬性 __name__。一個模塊的 __name__ 的值取決於您如何應用模塊。如果 import 一個模塊,那麼模塊__name__ 的值通常為模塊文件名,不帶路徑或者文件擴展名。但是您也可以像一個標準的程序樣直接運行模塊,在這種情況下, __name__ 的值將是一個特別預設"__main__"。上述類中加上__name__ == '__main__'的判斷語句,可以直接在終端環境下執行python dirfile.py /tmp進行測試,不必非得在互動式環境下導入模塊進行測試。
⑵ 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種方法了,如果你還有其他方法,歡迎評論交流。
⑶ 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.txt
C:\TDDOWNLOAD
b.txt
C:\TDDOWNLOAD\sub1
c.txt
C:\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.txt
C:\TDDOWNLOAD\b.txt
C:\TDDOWNLOAD\sub1\c.txt
C:\TDDOWNLOAD\sub1\d.txt
>>>
'*'為匹配模式,代表匹配所有文件,只有這樣才能將子文件夾查出來,以便遞歸深入,探查下一層的文件。
⑷ 如何用Python os.path.walk方法遍歷搜索文件內容的操作詳解
文中使用到了Python os模塊和Python sys模塊,這兩個模塊具體的使用方法請參考玩蛇網相關文章閱讀。
Python os.path.walk方法遍歷文件搜索內容方法代碼如下:
?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
import os, sys
#代碼中需要用到的方法模塊導入
listonly = False
skipexts = ['.gif', '.exe', '.pyc', '.o', '.a','.dll','.lib','.pdb','.mdb'] # ignore binary files
def visitfile(fname, searchKey):
global fcount, vcount
try:
if not listonly:
if os.path.splitext(fname)[1] in skipexts:
pass
elif open(fname).read().find(searchKey) != -1:
print'%s has %s' % (fname, searchKey)
fcount += 1
except: pass
vcount += 1
#www.iplaypy.com
def visitor(args, directoryName,filesInDirectory):
for fname in filesInDirectory:
fpath = os.path.join(directoryName, fname)
if not os.path.isdir(fpath):
visitfile(fpath,args)
def searcher(startdir, searchkey):
global fcount, vcount
fcount = vcount = 0
os.path.walk(startdir, visitor, searchkey)
if __name__ == '__main__':
root=raw_input("type root directory:")
key=raw_input("type key:")
searcher(root,key)
print 'Found in %d files, visited %d' % (fcount, vcount)
⑸ 如何用Python os.path.walk方法遍歷搜索文件內容的操作詳解
importos
forroot,dirs,filesinos.walk(os.getcwd()):
print(root,dirs,files)
找個文件夾,運行這段代碼就知道怎麼用了。
⑹ python3字典遍歷
(1)遍歷key值
在使用上,for key in a和 for key in a.keys():完全等價。
(2)遍歷value值
(3)遍歷字典項
(4)遍歷字典健值
在使用上for key,value in a.items()與for (key,value) in a.items()完全等價