2016-11-07 242 views
1

我使用os.walk()方法在文件夾中爬網。在其中一個文件夾中,有大量文件,其中大約100,000個文件。這些文件看起來像:p_123_456.zip。但它們被讀作p123456.zip。事實上,當我打開Windows資源管理器瀏覽文件夾時,前幾秒鐘這些文件看起來像p123456.zip,但是然後將其外觀更改爲p_123_456.zip。這是一個奇怪的場景。在python3中使用os.walk時讀取的文件不正確

現在,我不能使用time.sleep(),因爲所有文件夾和文件都被讀入循環行中的python變量。下面是代碼片段:

for root, dirs, files in os.walk(srcFolder): 
     os.chdir(root) 
     for file in files: 
      shutil.copy(file, storeFolder) 

在最後一行中,我得到一個文件未發現異常,稱該文件p123456.zip不存在。有沒有人遇到這個神祕的問題?無論如何繞過這個?這是什麼原因?謝謝。

+0

這是什麼不正確?當您嘗試打開文件時是否收到異常?如果是這樣,什麼是異常和追溯?還是你只是假設Python將會拉錯名字?是否有可能該文件夾中同時包含「p_123_456.zip」和「p123456.zip」,並且它只需要一些時間對Windows Explorer進行排序以顯示文件名? –

+0

我想將文件移動到其他文件夾。所以當名稱被讀取時,它不帶'_'。但是當我調用移動操作時,它說這樣的文件不存在。 – splinter

+0

當你移動的文件是你給源文件的完整路徑? 'source_full_path = os.path.join(root,fname)' –

回答

4

您似乎沒有將實際的文件夾名稱與文件名連接起來。嘗試將您的代碼更改爲:

for root, dirs, files in os.walk(srcFolder): 
    for file in files: 
     shutil.copy(os.path.join(root, file), storeFolder) 

os.chdir應該像瘟疫一樣避免。首先 - 如果更改成功,它將不再是您運行os.walk的目錄 - 然後,第二個chdir在另一個文件夾將失敗(或者停止您的porgram或將您更改爲意外的文件夾)。

只需將文件夾名稱添加爲前綴,並且不要嘗試使用chdir。

此外,至於上面的ShadowRanger的評論,os.walk正式中斷,如果chdir在其迭代 - https://docs.python.org/3/library/os.html#os.walk - 這可能是你有問題的根源。

相關問題