導航:首頁 > 編程語言 > 遍歷搜索python

遍歷搜索python

發布時間:2022-10-01 16:23:12

1. 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種方法了,如果你還有其他方法,歡迎評論交流。

2. python:遍歷文件並搜索/讀取

os.walk()

3. 如何利用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

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進行測試,不必非得在互動式環境下導入模塊進行測試。

4. 如何用Python os.path.walk方法遍歷搜索文件內容的操作詳解

恭喜你,你的問題跟絕大多數不會問問題的人一樣,讓人覺得無從下手。我建議有些問題可以去stackoverflow上看看別人怎麼問問題的,好的問問題的方式需要注意哪些。

5. python怎樣遍歷.py的內容

列表的遍歷
方法一:通過for循環
li = [i for i in range(10)]
for i in li:
print(i)
方法二:通過while循環
# 雖然for循環已經很好用了,但是在有些情況下,使用while循環可以更靈活
# 只需要將判斷條件設置為小於列表長度,即可完成列表通過while循環的遍歷
li = [i for i in range(10)]
i = 0
while i < len(li):
print(li[i])
i += 1
方法三:配合enumerate使用,同時獲取列表的索引
li = [i + 1 for i in range(10)]

# 此時,i為一個元組,元組的第一個元素為索引,第二個元素為原列表的元素
# 因此,在遍歷列表的同時,需要同時獲取坐標的情況下,可以配合enumerate()一起使用
for i in enumerate(li):
print(i)
字典的遍歷
字典的遍歷和列表有一些不同,因為字典有鍵和值兩個關鍵部分。默認的遍歷情況,是遍歷字典的鍵,當然,可以通過字典的鍵取得值,也可以直接遍歷值,或者直接遍歷鍵和值。

方法一:直接使用for循環
直接使用for循環對一個字典進行遍歷,默認取得的是字典的鍵

dt = {i: i + 1 for i in range(10)}

for i in dt:
print("字典的鍵:", i) # 字典的鍵
print("字典的值:", dt[i]) # 字典的值
方法二:遍歷dict.keys()
這種方法與方法一的效果其實是一樣的,同樣是獲取字典的鍵

dt = {i: i + 1 for i in range(10)}

for i in dt.keys():
print("字典的鍵:", i) # 字典的鍵
print("字典的值:", dt[i]) # 字典的值
方法三:遍歷dict.values()
這種方法與方法一和二很不相同,因為它只獲取了字典的值

dt = {i: i + 1 for i in range(10)}

# 這是很特殊的方法,因為它沒有獲取字典的鍵
for i in dt.values():
print("字典的值:", i) # 此時i不再是字典的鍵,而是值
方法四:遍歷dict.items()
這種方法一般來說要更好,因為它同時獲取到了字典的鍵和值,而且性能上要高於先獲取鍵,再通過鍵獲取對應的值

dt = {i: i + 1 for i in range(10)}

for i in dt.items():
print("字典的鍵值對:", i)
print("字典的鍵:", i[0])
print("字典的值:", i[1])
總結
1,列表的遍歷比較簡單,除了配合enumerate()使用,可以同步獲取索引以外,並沒有特別值得糾結的。

2,字典的遍歷方法比較多,其中第四種是能適用於一切情況的,前兩種也可以適用於一切情況,但是如果你同時需要獲取鍵和值,性能不如第四種要好。第三種比較特別,除非你真的只需要字典的值,否則它在多數情況下是不能夠滿足需求的。

6. 如何用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)

7. 如何用Python os.path.walk方法遍歷搜索文件內容的操作詳解

importos,sys
#代碼中需要用到的方法模塊導入


listonly=False

skipexts=['.gif','.exe','.pyc','.o','.a','.dll','.lib','.pdb','.mdb']#ignorebinaryfiles


defvisitfile(fname,searchKey):
globalfcount,vcount
try:
ifnotlistonly:
ifos.path.splitext(fname)[1]inskipexts:
pass
elifopen(fname).read().find(searchKey)!=-1:
print'%shas%s'%(fname,searchKey)
fcount+=1
except:pass
vcount+=1

#www.iplaypython.com

defvisitor(args,directoryName,filesInDirectory):
forfnameinfilesInDirectory:
fpath=os.path.join(directoryName,fname)
ifnotos.path.isdir(fpath):
visitfile(fpath,args)


defsearcher(startdir,searchkey):
globalfcount,vcount
fcount=vcount=0
os.path.walk(startdir,visitor,searchkey)


if__name__=='__main__':
root=raw_input("typerootdirectory:")
key=raw_input("typekey:")
searcher(root,key)
print'Foundin%dfiles,visited%d'%(fcount,vcount)

8. 如何用Python os.path.walk方法遍歷搜索文件內容的操作詳解

importos
forroot,dirs,filesinos.walk(os.getcwd()):
print(root,dirs,files)

找個文件夾,運行這段代碼就知道怎麼用了。

9. python中列表的遍歷

沒有優雅的方法解決,只有不要使用print語句,如樓上所說,或者使用python3.X中的print函數(通過

from __future__ import print_function使能print函數形式)

其實,在python2.X手冊中對print語句描述說:(python2.7.2官方幫助文檔)
一個空格會被自動列印在每個對象前,
除非:(1)還沒有輸出寫到標准輸出中
(2)當最後一個寫到標准輸出的是一個除了空格『 』的空白字元
(3)當最後寫到標准輸出的不是一個print語句。

所以在apple、banana等每個字元前都有一個空格。(apple的a前也有空格呢!)

一個好的解決辦法是使用python3.X中的print函數。
通過在文件前面加上:
from __future__ import print_function
就可以使用print的函數形式了。
print函數的語法:
print([object, ...][, sep=' '][, end='\n'][, file=sys.stdout])
默認下,若沒有指定sep,則使用空格。沒指定end,則使用換行符。沒指定輸出文件則輸出到標准輸出。
例如:print('hello','world',sep='-',end='#')輸出:
hello-world#
所以,你的程序可改為:
from __future__ import print_function
list = ["apple", "banana", "grape", "orange"]
for x in range(len(list)):
print('list[%d]:'%x,end='')
for y in range(len(list[x])):
print(list[x][y],sep='',end='')
print('')

至於: 'list[%d]:'%x 這里的百分號,是一個對字元串的操作符。百分號使得百分號前面的字元串中

的%d被百分號後的x的值替換掉。

10. 如何用Python os.path.walk方法遍歷搜索文件內容的操作詳解

本文是關於如何用Python os.path.walk方法遍歷搜索文件目錄內容的操作詳解的文章,python 代碼中用os.path.walk函數這個python模塊的方法來遍歷文件,python列出文件夾下的所有文件並找到自己想要的內容。
文中使用到了Python os模塊和Python sys模塊,這兩個模塊具體的使用方法請參考玩蛇網相關文章閱讀。
Python os.path.walk方法遍歷文件搜索內容方法代碼如下:
?

041
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相關的資料

熱點內容
燕趙紅楓app如何下載 瀏覽:867
php查殺軟體 瀏覽:877
教育管理學pdf 瀏覽:547
伺服器均衡怎麼使用 瀏覽:626
linux中jps 瀏覽:954
單片機實驗感想 瀏覽:560
程序員級別數學演算法邏輯 瀏覽:899
2k21公園怎麼換伺服器 瀏覽:724
php釋放資料庫連接 瀏覽:722
php網頁抓取工具 瀏覽:726
android設置對齊方式 瀏覽:23
linux創建網頁 瀏覽:280
凈化車間門演算法 瀏覽:934
安卓怎麼搞jpg 瀏覽:546
如來佛祖命令雷神去下界 瀏覽:856
新電腦管家下載好怎麼解壓 瀏覽:530
php獲取介面數據 瀏覽:767
最後的命令 瀏覽:921
如何添加手機app桌面快捷圖標 瀏覽:427
ui設計師與程序員 瀏覽:419