2011-09-20 40 views
4

我只是想寫一個小應用程序,它從名爲'DATA.DAT'的文件中獲取一個值,並用該值重命名包含該文件的文件夾。OSError:目錄不是空的提出,如何解決?

.py腳本運行在另一個文件夾中,並允許用戶定義路徑。爲了給你一個更好的想法,用戶定義的路徑必須是(在Mac上)'/ Users/User/Desktop/FOLDER','FOLDER'應該包含'DATA.DAT'。

這就是源代碼的一小部分的樣子:

try: 
    data = open('DATA.DAT').read() 

    data_data = data[12:17] 
    path_paths = path.rsplit('/') 
    basepath = '/'.join(path_paths[:-1]) 
    chdir(basepath) 

    if path_paths[-1] <> data_data: 
     rename(path_paths[-1], data_data) 
     raw_input('Folder name has been corrected! Thank you.') 
     quit() 
    else: 
     print('Folder name was already correct! Thank you.') 
     quit() 
except IndexError: 
    raw_input('ERROR!') 
    quit() 

那麼,它的工作原理;但它提高和異常「文件夾」時,包含多個文件(實際上,「文件夾」應該只包含「data.dat文件」等文件夾。這不給的問題。)...

Traceback (most recent call last): 
    File "/Users/User/Desktop/example.py", line 72, in <module> 
    rename(path_paths[-1], data_data) 
OSError: [Errno 66] Directory not empty 

只是爲了防止這種情況發生,有沒有辦法解決這個問題?謝謝。

+0

將chdir()重命名之前會發生什麼情況?這是什麼平臺? – wberry

回答

13

編輯:使用正確的工具是shutil.move

shutil.move(path_paths[-1], data_data) 

假設path_paths[-1]是要重命名的絕對目錄,data_data是要重命名它絕對目錄名。

目的地目錄必須不存在爲此工作。這兩個位置不需要在同一個文件系統上。


舊的回答:使用os.renames而不是os.rename

它將遞歸地創建任何需要的目錄。

+0

我tryed,但它給了我完全一樣的錯誤: 回溯(最近通話最後一個): 文件「/Users/User/Desktop/example.py」,行72,在 重命名(path_paths [ - 1],data_data) 文件「/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/os.py」,行199,重命名爲 rename(old,new) OSError:[Errno 66 ]目錄不爲空 – PyGuy

+0

@PyGuy編輯我的答案。 – agf

+0

謝謝,現在它正在工作!這裏的一個例子: path_paths [-1] ='/ Users/User/Desktop/lol' data_data ='/ Users/User/Desktop/asd' ......我是對嗎? – PyGuy

2

使用起來更容易shutil

相關問題