从Python中的多个特定子文件夹复制文件
在文件路径D:/src下,我有图像文件夹及其子文件夹,它们具有如下常规结构:从Python中的多个特定子文件夹复制文件,python,operating-system,glob,shutil,Python,Operating System,Glob,Shutil,在文件路径D:/src下,我有图像文件夹及其子文件夹,它们具有如下常规结构: Folder A - Subfolder a - Subfolder b - Subfolder c Folder B - Subfolder a - Subfolder b - Subfolder c - Subfolder d Folder C - Subfolder a - Subfolder b - Subfolder c ... 我想将子文件夹b中的所有.jpg文件从文件夹A、b、C等复制到D:/dst中的
Folder A
- Subfolder a
- Subfolder b
- Subfolder c
Folder B
- Subfolder a
- Subfolder b
- Subfolder c
- Subfolder d
Folder C
- Subfolder a
- Subfolder b
- Subfolder c
...
我想将子文件夹b中的所有.jpg文件从文件夹A、b、C等复制到D:/dst中的新文件夹子文件夹b中。我如何用Python实现它?谢谢
Subfolder b
-xxx.jpg
-xyx.jpg
-yxz.jpg
...
以下是我从以下链接中发现的内容,可能会有所帮助:
试试这个
import os
from os.path import join, isfile
BASE_PATH = 'd:/test'
SUBFOLDER = 'Subfolder b'
for folder, subfolders, *_ in os.walk(BASE_PATH):
if SUBFOLDER in subfolders:
full_path = join(BASE_PATH, folder, SUBFOLDER)
files = [f for f in os.listdir(full_path) if isfile(join(full_path, f)) and f.lower().endswith(('.jpg', '.jpeg'))]
for f in files:
file_path = join(full_path, f)
print (f'Copy {f} somewehere')
试试这个
import os
from os.path import join, isfile
BASE_PATH = 'd:/test'
SUBFOLDER = 'Subfolder b'
for folder, subfolders, *_ in os.walk(BASE_PATH):
if SUBFOLDER in subfolders:
full_path = join(BASE_PATH, folder, SUBFOLDER)
files = [f for f in os.listdir(full_path) if isfile(join(full_path, f)) and f.lower().endswith(('.jpg', '.jpeg'))]
for f in files:
file_path = join(full_path, f)
print (f'Copy {f} somewehere')
假设有两个嵌套级别
root_dir = './data'
dest_dir = './new_location'
os.listdir(root_dir)
for folder in os.listdir(root_dir):
folder_path = os.path.join(root_dir, folder)
if os.path.isdir(folder_path):
for subfolder in os.listdir(folder_path):
if subfolder == 'Subfolder B':
subfolder_path = os.path.join(root_dir, folder, subfolder)
print(subfolder_path)
for filename in os.listdir(subfolder_path):
file_path = os.path.join(root_dir, folder, subfolder, filename)
dest_path = os.path.join(dest_dir, filename)
shutil.copy(file_path, dest_path)
print("Copied ", file_path, "to", dest_path)
您只需要2个for循环,在内部for循环中,您只需检查文件夹名称是否与
子文件夹B
匹配。如果有,则将该目录中的所有文件复制到目标文件夹。假设有两个嵌套级别
root_dir = './data'
dest_dir = './new_location'
os.listdir(root_dir)
for folder in os.listdir(root_dir):
folder_path = os.path.join(root_dir, folder)
if os.path.isdir(folder_path):
for subfolder in os.listdir(folder_path):
if subfolder == 'Subfolder B':
subfolder_path = os.path.join(root_dir, folder, subfolder)
print(subfolder_path)
for filename in os.listdir(subfolder_path):
file_path = os.path.join(root_dir, folder, subfolder, filename)
dest_path = os.path.join(dest_dir, filename)
shutil.copy(file_path, dest_path)
print("Copied ", file_path, "to", dest_path)
您只需要2个for循环,在内部for循环中,您只需检查文件夹名称是否与
子文件夹B
匹配。如果确实如此,则将该目录中的所有文件复制到目标文件夹。以下是一个简短的脚本,可以完成此工作
import os
# list all the directories in current directory
dirs = [x[0] for x in os.walk("D:/src")]
for d in dirs:
## list all files in A/b/*, B/b/*, C/b/*...
files_to_copy = os.listdir(os.path.join(d, "b"))
for f in files_to_copy:
if f.endswith(".jpg"): ## copy the relevant files to dest
shutil.copy(os.path.join(d, "b", f), os.path.join(dest, f))
这里有一个简短的脚本,应该做的工作
import os
# list all the directories in current directory
dirs = [x[0] for x in os.walk("D:/src")]
for d in dirs:
## list all files in A/b/*, B/b/*, C/b/*...
files_to_copy = os.listdir(os.path.join(d, "b"))
for f in files_to_copy:
if f.endswith(".jpg"): ## copy the relevant files to dest
shutil.copy(os.path.join(d, "b", f), os.path.join(dest, f))
要将其复制到哪里?复制到D:/dest/子文件夹b下的新文件夹中。我更新了问题。谢谢,谢谢你的帮助。我将尝试这些方法,并让您知道结果。:)要将其复制到哪里?复制到D:/dest/子文件夹b下的新文件夹中。我更新了问题。谢谢,谢谢你的帮助。我将尝试这些方法,并让您知道结果。:)