2015-04-17 50 views
2

嗨,我很新編程,請原諒我的無知。 我想在任何實例中將10個文件從目錄A移動到B,程序應該足夠靈活,以便在源目錄中少於10個文件時,它不應該給出錯誤,而其餘的最多。Python - 一次移動10個文件

我正在使用的循環是。這項工作做得很好時,有目錄

w =0 
while w < 10: 
    w =w+1 
    apple = random.choice(os.listdir("/home/prabh00b/dakoat_wb_script/2")) 
    o = ''.join(["/home/prabh00b/dakoat_wb_script/2/", apple]) 
    shutil.move(o,"/home/prabh00b/dakoat_wb_script/") 

回答

5

而不是使用random.choice超過10個文件,使用random.sample來從目錄列表中10個元素。這有一個好處,你只需要撥打os.listdir一次,並且不需要循環10次就可以選擇一個新的隨機元素。它也總是會給你不同的元素,所以你最終不會試圖移動同一個文件兩次。

要處理少於10個文件的情況,您可以首先檢查目錄列表的長度。我們可以通過獲得最少10個或列表長度來完成這項工作(最多可以獲得10個元素)。

files = os.listdir('/home/prabh00b/dakoat_wb_script/2') 
for fileName in random.sample(files, min(len(files), 10)): 
    path = os.path.join('/home/prabh00b/dakoat_wb_script/2', fileName) 
    shutil.move(path, '/home/prabh00b/dakoat_wb_script/') 
0

在這種情況下,poke的答案肯定是最好的。我想提出一個用於學習目的的替代方案。

random.choice在給定空序列時(即,當沒有更多文件要移動時)將引發IndexError異常。要使您的代碼正常工作,您可以捕獲IndexError並停止循環,如下所示:

w =0 
while w < 10: 
    w =w+1 
    try: 
     apple = random.choice(os.listdir("/home/prabh00b/dakoat_wb_script/2")) 
    except IndexError: 
     # There are no more files to move. Exit the while loop. 
     break 
    o = ''.join(["/home/prabh00b/dakoat_wb_script/2/", apple]) 
    shutil.move(o,"/home/prabh00b/dakoat_wb_script/")