2015-10-14 72 views
0

我剛剛發現了關於熊貓並安裝了購買現在我的循環迭代通過文件行爲奇怪。下面是對我的問題,一個小例子:導入熊貓打破了我的os.walk循環

#!/usr/bin/env python 
import os 

PATH=os.environ['HOME']+"/scripts/" 

for path_, dir_names, file_names in os.walk(PATH): 
    for name in file_names: 
    print(path_+name) 

正如我的預期輸出的文件夾中只有一個燒毛文件(即該腳本):

/home/scripts/parser.py 

但是如果我現在延長import ospandasimport os, pandas)的文件打印了兩次:

/home/scripts/parser.py 
/home/scripts/parser.py 

我不知道是怎麼回事。我是否搞亂了安裝(apt-get install python3-pandas)?

編輯:

我不知道這是相關的,但是當我輸入大熊貓產生__pycache__文件夾。

+4

如果您意外地命名了腳本pandas.py或者意外地鍵入了「import os,parser」而不是「import os,pandas」,那麼這就是您會看到的行爲。如果這實際上是由熊貓引起的,那將是很奇怪的。 –

+0

我可以驗證我是否使用了正確的命名。我還創建了幾個新文件夾來測試它,它總是一樣的。而且我也不認爲它是由熊貓引起的,我認爲這可能與我如何安裝它有關。 – jan

+0

如果您將腳本命名爲完全不同的東西,您會得到相同的結果嗎? –

回答

2

這實際上是一個通用的Python的東西。該腳本將複製問題,而熊貓:

parser.py:

import tempfile 
print 'hello' 

如果臨時文件是一個標準的Python包。

現在在bash運行

$ export PYTHONPATH=. 
$ python parser.py 
hello 
hello 

print語句被執行兩次!會發生什麼是parser.py導入tempfile,tempfile嘗試導入標準python包「解析器」(https://docs.python.org/2/library/parser.html)。但是由於 」。」 (當前目錄)位於PYTHONPATH中,而是再次導入原始腳本,這會再次打印「hello」。

道德故事:不要將您的腳本命名爲標準庫軟件包,並且絕對不要亂用PYTHONPATH。