首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >shutil和复制文件

shutil和复制文件
EN

Stack Overflow用户
提问于 2012-02-13 23:10:10
回答 2查看 7K关注 0票数 2

我有一个很大的图像数据集(大约3000个文件)。我的问题很简单,我想复制随机选择的图像文件到另一个目的地。我使用random.sample来选择500张图片,并将它们的名称存储在一个列表中。现在,我希望将文件从src文件夹复制到目标文件夹,前提是它们的名称存在于列表中(因此是随机选择的)。

但是,下面的代码复制文件夹中的所有文件,而不管它们的名称是否出现在随机选择的列表中。帮助

代码语言:javascript
复制
import os.path
import os
import glob
import random
import shutil


dirfiles = os.listdir("/media/Data/Leaves/Leaves")
myfiles = []
myfiles.append(random.sample(dirfiles,500))


print myfiles


final_list=myfiles[0]
print final_list
count=0

for elem in final_list:
    print elem
    count= count+1

print count


src = '/home/mjanja/Desktop/Leaves'
dst = '/home/mjanja/Desktop/Positive Leaves'
for filename in final_list:
    for file in glob.glob( os.path.join(src,filename)):
        shutil.copy(file,dst)

print "Copied file!!" +infile
EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2012-02-14 01:31:13

在这种情况下,使用glob.glob就是危险发生的地方。这将返回符合您提供的模式的所有文件的迭代器。您正在构建一个包含500个特定文件的列表,但随后通过模式进行匹配...根据你的文件名中的字符,这可能会给你带来非常令人惊讶的结果,因为模式很可能比你原来的500匹配更多的文件。

您还执行了一些不必要的步骤,并可能将其全部封装在一个函数中:

代码语言:javascript
复制
import os
import random
import shutil

def copy_sample(src, dst, size=500):
    files = [os.path.join(src, i) for i in random.sample(os.listdir(src), size)]
    count = len(files)
    for index, afile in enumerate(files):
        try:
           shutil.copy(afile, dst)
           print 'Copied file %s (%d/%d)' % (afile, index + 1, count)
        except Exception, msg:
           print 'Failed file %s (%d/%d) -- %s' % (afile, index + 1, count, msg)

src = '/home/mjanja/Desktop/Leaves'
dst = '/home/mjanja/Desktop/Positive Leaves'

copy_sample(src, dst)
票数 3
EN

Stack Overflow用户

发布于 2012-02-13 23:16:23

您正在做一些太复杂的事情,比如计算元素数和定义不同位置的目录。

这个怎么样?

代码语言:javascript
复制
import os
import random
import shutil

src = '/home/mjanja/Desktop/Leaves'
dst = '/home/mjanja/Desktop/Positive Leaves'

dirfiles = os.listdir(src)
myfiles = random.sample(dirfiles, 500)
count = len(myfiles)

for filename in myfiles:
    shutil.copy(os.path.join(src, filename), dst)
票数 4
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/9262781

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档