2015-04-17 4 views
2

Привет, я очень новичок в программировании, пожалуйста, извините мое невежество. Я пытаюсь переместить 10 файлов из dir A в B в любом случае, как бы программа была достаточно гибкой, чтобы при наличии менее 10 файлов в исходном каталоге она не должна давать ошибку, тогда как большая часть ее.Python - перемещать 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/") 

ответ

5

Вместо использования 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/') 
0

Ответ на вопрос, безусловно, лучший в этом случае. Я бы хотел предложить альтернативу для обучения.

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/") 
Смежные вопросы