簡體   English   中英

Python os.walk()函數與find命令

[英]Python os.walk() function vs. find command

我正在編寫一個程序來遍歷文件系統以收集文件信息以放入數據庫中。 我嘗試過一輩子的shell腳本學習python, os.walk現在find返回和os.walk返回之間存在問題

find THIS_PATH -print

for dirpath, dirs, files in os.walk( THIS_PATH ):
    print ( root )
    for fname in files:
        print ( os.path.join( root, fname ) )

我遇到的問題是“ OS” find將符號鏈接返回目錄,但是python查找沒有,並且我也不知道如何使它這樣做。 現在,我不希望它跟隨它們(即followlinks=True ),這也會產生與find不同的結果。 但是我希望能夠打印作為目錄符號鏈接的條目。

謝謝c

如果要獲得相同的輸出(排序可能會有所不同),則需要打印給定路徑的目錄和文件。 find返回目錄以及鏈接(指向任何內容)。 對您的代碼的最小更改是:

print(THIS_PATH)
for dirpath, dirs, files in os.walk(THIS_PATH):
    for fname in dirs + files:  # iterate over items form both lists
        print (os.path.join(dirpath, fname))

使用pathlib可能會更容易pathlib

from pathlib import Path
mypath = Path(THIS_PATH)
for found_item in mypath.rglob('*'):
    print(mypath.joinpath(found_item))

例如,我創建了以下樹:

.
├── d1
│   ├── d2
│   │   └── f2
│   └── f1
├── f2 -> d1/d2/f2
└── l1 -> d1

運行find將產生(注意目錄和目錄鏈接以相同的方式出現):

$ find .
.
./f2
./l1
./d1
./d1/.h
./d1/d2
./d1/d2/f2
./d1/f1

然后使用THIS_PATH='.'運行第一個代碼段THIS_PATH='.' 產生相同的項目(順序略有不同,“ find默認默認為“深度”,“ os.walk ”首先進行“廣度”)。 對於pathlib例如只是潔具如果THIS_PATH'.' ,因為這樣會使開頭的./斷掉。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM