[英]Is os.walk() missing symlinks to directories?
我有一個目錄,其中包含一些文件,一些目錄,一些指向文件的符號鏈接和一些指向目錄的符號鏈接。
當我在目錄中使用followlinks = false進行os.walk()時,我得到了文件名和指向文件名列表中目錄以及目錄名列表中目錄的符號鏈接。 但是目錄的符號鏈接不會顯示在任何地方。 這是Python中的錯誤還是功能,還是我做錯了什么?
我希望到目錄的符號鏈接顯示在文件名列表中,因為它們不是目錄而是符號鏈接,而其他符號鏈接(到其他文件)則顯示在文件名列表中。
示例:目錄foo包含以下內容:
-rw-rw-r-- 4 rikno staff 136 Jan 14 11:10 firefox
lrwxr-xr-x 1 rikno staff 5 Jan 23 13:29 latex -> tetex
lrwxr-xr-x 2 rikno staff 68 Jan 14 11:10 mozilla -> firefox
drwxrwxr-x 3 rikno staff 102 Jan 23 13:29 tetex
我希望在第一次迭代中返回os.walk('foo')
('foo', ['tetex'], ['firefox', 'latex', 'mozilla'])
或至少
('foo', ['latex', 'tetex'], ['firefox', 'mozilla'])
但我得到的只是
('foo', ['tetex'], ['firefox', 'mozilla'])
而且我從沒有得到關於符號鏈接乳膠(指向目錄tex)的任何信息
好,結果是
('foo', ['latex', 'tetex'], ['firefox', 'mozilla'])
因此,指向目錄的符號鏈接顯示在目錄名列表中。
我首先希望指向目錄的符號鏈接位於文件名列表中,而從未在目錄名列表中查找,並且在嘗試代碼和文件系統以查找鏈接在何處或鏈接“丟失”的原因時,我不小心混淆了我的結果。
很抱歉問。
您寫道,您將os.walk()
跟隨followlinks
設置為False
。 好吧,這就是預期的行為 :
默認情況下,
walk()
不會向下瀏覽到解析為目錄的符號鏈接。 將followlinks
設置為True
以在支持符號鏈接的系統上訪問由符號鏈接指向的目錄。
在我的機器上運行, os.walk()
確實顯示了所有的符號鏈接:
>>> os.walk("foo").next()
('foo', ['tetex', 'latex'], ['mozilla', 'firefox'])
>>> os.walk("foo", followlinks=False).next()
('foo', ['tetex', 'latex'], ['mozilla', 'firefox'])
我在這里看到的唯一“問題”是sym鏈接出現在目錄列表中而不是文件列表中。
在大多數情況下,這是預期的行為,因為人們希望能夠將文件列表中的所有條目視為文件,而不必檢查它是否是符號鏈接。
python-dev中的該線程簡要討論了該問題。
“ ...將符號鏈接目錄放到文件列表中而不是子目錄列表中實際上並沒有任何改善(它只是將問題轉移到了不同的用例上,例如實際想讀取文件內容的用例)。 “
並從鏈接的問題頁面 :
“例如,為了計算目錄下所有文件的行數,代碼可以像這樣:
for root, dirs, files in os.walk(top): for file in files: f = open(file) for n, l in enumerate(f, 1): pass print(file, n)
如果突然在文件中出現了指向目錄的符號鏈接,則此鏈接將中斷。 因此,我不認為值得更改此設置。 與目錄的符號鏈接離文件的距離並不比與目錄的距離更近,它實際上取決於用例。”
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.