Python一次移动10个文件

2024-09-30 20:36:43 发布

您现在位置:Python中文网/ 问答频道 /正文

嗨,我对编程很陌生,请原谅我的无知。 我试着在任何情况下把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/")

Tags: 文件方法程序目录applehome编程错误
2条回答

不要使用random.choice,而是使用^{}从目录列表中获取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/')

在这种情况下,波克的回答肯定是最好的。我想为学习目的提出一个替代方案。在

当给定一个空序列时,random.choice将引发索引器错误异常(即,当没有更多的文件要移动时)。要使代码正常工作,可以捕获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/")

相关问题 更多 >