嗨,我是编程新手,请原谅我的无知。 我试图在任何情况下将dir A中的10个文件移动到B,但程序应该足够灵活,以便当源目录中的文件少于10个时,它不应该给出错误,而大部分文件都是错误的。 / p>
我正在使用的循环是。当目录
中有超过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/")
答案 0 :(得分:5)
使用random.sample
从目录列表中获取10个元素,而不是使用random.choice
。这样做的好处是,您只需要调用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/')
答案 1 :(得分: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/")