2013-08-18 38 views
0

我的程序找不到它剛剛製作的路徑,該程序用於對下載文件夾中的文件進行排序。 如果它發現一個新類型的文件,它應該爲該文件類型創建一個文件夾。python找不到它剛剛製作的文件

import os 

FileList = os.listdir("/sdcard/Download/") 
for File in FileList: 
    #print File 
    extension = ''.join(os.path.splitext(File)[1]) 
    ext = extension.strip('.') 
    if os.path.exists("/mnt/external_sd/Download/" + ext): 
     Data = open("/sdcard/Download/" + File, "r").read() 
     file("/mnt/external_sd/" + ext + "/" + File, "w").write(Data) 
    elif os.path.exists("/mnt/external_sd/Download/" + ext) != True: 
     os.makedirs("/mnt/external_sd/Download/" + ext) 
     Data = open("/sdcard/Download/" + File, "r").read() 
     file("/mnt/external_sd/" + ext + "/" + File, "w").write(Data) 
+0

我還沒有在Python上玩過一段時間,但不是這行'os.makedirs(「/ mnt/external_sd/Download /」+ ext)'創建一個目錄,而不是一個文件,你然後嘗試打開? – charmlessCoin

+0

@charmlessCoin:那麼,他確實會追加'「/」+ File'。 –

+0

@charmlessCoin是的,它確實建立了一個目錄。 –

回答

3

您創建目錄

"/mnt/external_sd/Download/" + ext 

但你正在試圖寫

"/mnt/external_sd/" + ext + "/" + File 

你在這條道路投下了Download文件夾。更改最後一行:

file("/mnt/external_sd/Download/" + ext + "/" + File, "w").write(Data) 

順便說一句,這將是一個有點短,更清晰由共享線取出ifelse聲明和使用shutil.copy,而不是讀整個文件中寫入你的最後七行然後重新寫出來:

import shutil 
if not os.path.exists("/mnt/external_sd/Download/" + ext): 
    os.makedirs("/mnt/external_sd/Download/" + ext) 
shutil.copy("/sdcard/Download/" + File, "/mnt/external_sd/Download/" + ext + "/" + File) 

(使用shutil也一般會更快,使用更少的內存,特別是如果你的文件比較大)。

+0

非常感謝您發現這個小而明顯的錯誤。 –