簡體   English   中英

Python-一次移動10個文件

[英]Python - move 10 files at a time

嗨,我對編程非常陌生,請原諒我的無知。 我試圖在任何情況下將10個文件從目錄A移到目錄B,但是該程序應具有足夠的靈活性,以至於當源目錄中的文件少於10個時,它應該不會出錯,而其余大多數文件都不會出錯。

我正在使用的循環是。 當目錄中有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/")

代替使用random.choice ,使用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/')

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

給定空序列(即沒有更多文件可移動)時, 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/")

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM