我有一个名为ImageData的文件夹,里面有5000个子文件夹,每个子文件夹包含2-3个图像。我想检索这些图像并将它们存储在一个位置/文件夹中,如何使用python来实现这一点。
发布于 2019-04-07 03:37:31
我不是百分之百确定我明白你所说的“存储它们”是什么意思,但是因为我想帮助你,所以我会假设你想要把它们复制到不同的路径。特别是,如果我理解正确的话,您的文件夹结构如下:
├── ImageData
│ ├── dir_1
│ │ ├── img_1
│ │ ├── img_2
│ ├── dir_2
│ │ ├── img_1
│ │ ├── img_2依此类推,您并不关心保存子目录的名称,而只是希望将所有这些图像移动到一个没有子结构的唯一目录中。
如果我的假设是正确的,那么我脑海中浮现的解决方案可能是:
import glob
import shutil
destination_path = "/path/to/your/oneplace_folder/"
pattern = "/path/to/your/ImageData/*/*"
for img in glob.glob(pattern):
shutil.copy(img, destination_path)这两个通配符分别用于ImageData下的子目录和其中的图像。此外,如果图像包含您希望在复制时保留的元数据,则可能需要使用documentation中指定的copy2()
发布于 2019-04-07 03:42:17
另一种可能的解决方案是:
import os
import cv2
directory = 'ImageData'
new_directory = 'NewImageData'
# If dir does not exist otherwise delete next line
os.mkdir(new_directory)
def copy_images():
for file_name in os.listdir(directory):
sub_dir_path = directory + '/' + file_name
if (os.path.isdir(sub_dir_path)):
for image_name in os.listdir(sub_dir_path):
if image_name[-4:] == '.jpg':
img = cv2.imread(image_name)
copied_image_path = new_directory + '/' + image_name
cv2.imwrite(copied_image_path, img)
copy_images()此代码将复制图像并将其保存到新创建的目标目录中。它不保留子文件夹层次结构。
发布于 2019-04-07 03:27:51
您可以从这里使用一个解决方案:Recursive sub folder search and return files in a list python来获取所有文件的列表。
然后遍历该列表,并将每个文件复制到主目录中,解决方案如下:How to move a file in Python
你最终会得到这样的结果
import glob
import os
# Location with subdirectories
my_path = "Images/"
# Location to move images to
main_dir = "ImagesMain/"
# Get List of all images
files = glob.glob(my_path + '/**/*.jpg', recursive=True)
# For each image
for file in files:
# Get File name and extension
filename = os.path.basename(file)
# Copy the file with os.rename
os.rename(
file,
main_dir + filename
)https://stackoverflow.com/questions/55552537
复制相似问题