遍历子目录,到示例文件
loop through sub directories, to sample files
以下代码从目录 1 中随机选择文件样本(在本例中为 50 个),并将它们复制到同名的新文件夹中。
但是,我有数百个文件夹需要从中取样(并复制到同名的新文件夹)。
如何调整代码的第一部分,以便我可以遍历所有子目录,并将样本移动到同名的新文件夹中。 (所以子目录 1 的样本转到目录 1,子目录 2 的样本转到目录 2 等)
import os
import shutil
import random
from shutil import copyfile
sourcedir = '/home/mrman/dataset-python/train/1/'
newdir = '/home/mrman/dataset-python/sub-train/1'
filenames = random.sample(os.listdir(sourcedir), 50)
for i in filenames:
shutil.copy2(sourcedir + i, newdir)
您希望使用 os.walk
。查看 documentation
运行 了解其工作原理,并阅读文档以了解如何将其用于您的解决方案。最终,将会发生的是,您将从您提供的路径向下遍历整个目录结构,并且每次迭代都会为您提供您所在的当前路径、该级别中的所有目录以及所有文件。
此外,假设您想对某个特定的完整路径执行操作,那么请确保在创建路径时利用 os.path.join。
your_path = "/some/path/you/want"
for path, dirs, files in os.walk(your_path):
print(path)
print(dirs)
print(files)
解决方案比预期的要简单(感谢@idjaw 的提示):
import os, sys
import shutil
import random
from shutil import copyfile
#folder which contains the sub directories
source_dir = '/home/mrman/dataset-python/train/'
#list sub directories
for root, dirs, files in os.walk(source_dir):
#iterate through them
for i in dirs:
#create a new folder with the name of the iterated sub dir
path = '/home/mrman/dataset-python/sub-train/' + "%s/" % i
os.makedirs(path)
#take random sample, here 3 files per sub dir
filenames = random.sample(os.listdir('/home/mrman/dataset-python/train/' + "%s/" % i ), 3)
#copy the files to the new destination
for j in filenames:
shutil.copy2('/home/mrman/dataset-python/train/' + "%s/" % i + j, path)
以下代码从目录 1 中随机选择文件样本(在本例中为 50 个),并将它们复制到同名的新文件夹中。
但是,我有数百个文件夹需要从中取样(并复制到同名的新文件夹)。
如何调整代码的第一部分,以便我可以遍历所有子目录,并将样本移动到同名的新文件夹中。 (所以子目录 1 的样本转到目录 1,子目录 2 的样本转到目录 2 等)
import os
import shutil
import random
from shutil import copyfile
sourcedir = '/home/mrman/dataset-python/train/1/'
newdir = '/home/mrman/dataset-python/sub-train/1'
filenames = random.sample(os.listdir(sourcedir), 50)
for i in filenames:
shutil.copy2(sourcedir + i, newdir)
您希望使用 os.walk
。查看 documentation
运行 了解其工作原理,并阅读文档以了解如何将其用于您的解决方案。最终,将会发生的是,您将从您提供的路径向下遍历整个目录结构,并且每次迭代都会为您提供您所在的当前路径、该级别中的所有目录以及所有文件。
此外,假设您想对某个特定的完整路径执行操作,那么请确保在创建路径时利用 os.path.join。
your_path = "/some/path/you/want"
for path, dirs, files in os.walk(your_path):
print(path)
print(dirs)
print(files)
解决方案比预期的要简单(感谢@idjaw 的提示):
import os, sys
import shutil
import random
from shutil import copyfile
#folder which contains the sub directories
source_dir = '/home/mrman/dataset-python/train/'
#list sub directories
for root, dirs, files in os.walk(source_dir):
#iterate through them
for i in dirs:
#create a new folder with the name of the iterated sub dir
path = '/home/mrman/dataset-python/sub-train/' + "%s/" % i
os.makedirs(path)
#take random sample, here 3 files per sub dir
filenames = random.sample(os.listdir('/home/mrman/dataset-python/train/' + "%s/" % i ), 3)
#copy the files to the new destination
for j in filenames:
shutil.copy2('/home/mrman/dataset-python/train/' + "%s/" % i + j, path)