我有一个名为ImageData的图像文件夹,该文件夹具有5000个子文件夹,每个子文件夹包含2-3个图像。我想检索这些图像并将它们存储在一个位置/文件夹中。如何使用python做到这一点。
答案 0 :(得分:0)
您可以从此处使用解决方案: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
)
答案 1 :(得分:0)
我不能100%地确定“存储它们”是否能理解您的意思,但是由于我想提供帮助,所以我会假设您要将它们复制到其他路径来继续前进。特别是,如果我正确理解了您的文件夹结构,例如以下:
├── 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()
答案 2 :(得分:0)
另一个可能的解决方案:
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()
此代码将复制图像并将其保存到新创建的目标目录中。它不保留子文件夹层次结构。
答案 3 :(得分:0)
对上述答案稍作改动:由于有时可能存在同名文件,因此检查很重要。
import glob
import os
import shutil
# Location with subdirectories
my_path = "Source/"
# Location to move images to
main_dir = "Dest/"
# 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)
filename=filename[:-4].replace(".", "-") + ".jpg"
#print(filename)
# Copy the file with os.rename
if not os.path.exists(os.path.join(main_dir, filename)):
os.rename(file, os.path.join(main_dir, filename))