Python 使用shutil和dictionary复制文件夹
我的目标是将文件夹复制到另一个位置,目录的结构是,我有多个文件夹,其中有自己的子文件夹,我不想复制所有的子文件夹,我只想复制其中的三个 我创建了一个字典,其中键是主文件夹的名称,值也是我想要的三个文件夹的字典,其中键是我想要的文件夹类型,值是我想要复制的原始目录中的文件夹名称 看起来是这样的:Python 使用shutil和dictionary复制文件夹,python,Python,我的目标是将文件夹复制到另一个位置,目录的结构是,我有多个文件夹,其中有自己的子文件夹,我不想复制所有的子文件夹,我只想复制其中的三个 我创建了一个字典,其中键是主文件夹的名称,值也是我想要的三个文件夹的字典,其中键是我想要的文件夹类型,值是我想要复制的原始目录中的文件夹名称 看起来是这样的: 't0107': {'Arteirial': 'ARTERIAL THIN', 'Portal': '5mm portal', 'Venous': 'VENOUS THIN'}, 't011': {'Ar
't0107': {'Arteirial': 'ARTERIAL THIN',
'Portal': '5mm portal',
'Venous': 'VENOUS THIN'},
't011': {'Arteirial': 'ARTERIAL THIN_0131',
'Portal': '5mm portal',
'Venous': 'VENOUS THIN'},
't0112': {'Arteirial': 'Thin Arterial Phase',
'Portal': 'Thin Portal Phase',
'Venous': 'Thin Venous Phase'},
't0113': {'Arteirial': 'Thin Arterial Phase',
'Portal': 'Thin Portal Phase',
'Venous': 'Thin Venous Phase'},
我正在尝试使用shutil.copytree在我尝试的地方完成这项工作
def copytree(src, dst, symlinks=False,ignore = None):
for item in os.listdir(src):
s = os.path.join(src, item)
d = os.path.join(dst, item)
if os.path.isdir(s):
shutil.copytree(s, d, symlinks, ignore)
else:
shutil.copy2(s, d)
path = '/media/username/ce162bb5-5654-4c36-9db2-55c7728ddb5a/CT/Anup/PhaseWise/'
for item in data_dict.keys():
copytree(str(path)+str(item)+'/'+data_dict[item]['Arteirial']+'/','/media/username/da5df9e4-cdc6-4d55-91e8-b2383e89165f/lion/'+str(item))
没什么用的,欢迎任何建议,提前谢谢
编辑:
代码正常,但有个问题
当目录被复制时,因为我在循环中运行命令os.mkdirdist_path+level1+level2,它将到达目标
并生成一个目录t004动脉瘦t004静脉瘦有什么方法可以让程序首先生成t004目录吗
然后让动脉变薄,静脉变薄,然后转移
root_path = "/media/username/ce162bb5-5654-4c36-9db2-55c7728ddb5a/LiverCT/Anup/PhaseWise/"
dist_path = "/media/username/da5df9e4-cdc6-4d55-91e8-b2383e89165f/lion/"
for level1,value1 in data_dict.items():
for level2, value2 in value1.items():
src_path = os.path.join(root_path,str(level1),str(value2))
os.mkdir(dist_path+level1+level2)
#print (src_path)
copytree(src_path,dist_path+level1+level2)
一些建议:
使用os.path.join替换字符串连接
copytree将把所有文件夹和文件从源文件夹复制到dist文件夹。不用再打包了
演示代码:
d = {'t0107': {'Arteirial': 'ARTERIAL THIN',
'Portal': '5mm portal',
'Venous': 'VENOUS THIN'},
't011': {'Arteirial': 'ARTERIAL THIN_0131',
'Portal': '5mm portal',
'Venous': 'VENOUS THIN'},
't0112': {'Arteirial': 'Thin Arterial Phase',
'Portal': 'Thin Portal Phase',
'Venous': 'Thin Venous Phase'},
't0113': {'Arteirial': 'Thin Arterial Phase',
'Portal': 'Thin Portal Phase',
'Venous': 'Thin Venous Phase'}}
src_path = "/home/username/src"
dst_path = "home/username/dst"
for level1,value1 in d.iteritems():
for level2, value2 in value1.iteritems():
from_path = os.path.join(src_path,level1,level2,value2)
to_path = os.path.join(dst_path,level1,level2,value2)
print from_path
# os.mkdir(to_path)
shutil.copytree(from_path,to_path) # the to_path will be created automatically, if the to_path is exists, it will raise OSError: [Errno 17] File exists.
输出行:
/home/username/src/t011/Arteirial/ARTERIAL THIN_0131
/home/username/src/t011/Venous/VENOUS THIN
/home/username/src/t011/Portal/5mm portal
/home/username/src/t0113/Arteirial/Thin Arterial Phase
/home/username/src/t0113/Venous/Thin Venous Phase
/home/username/src/t0113/Portal/Thin Portal Phase
/home/username/src/t0112/Arteirial/Thin Arterial Phase
/home/username/src/t0112/Venous/Thin Venous Phase
/home/username/src/t0112/Portal/Thin Portal Phase
/home/username/src/t0107/Arteirial/ARTERIAL THIN
/home/username/src/t0107/Venous/VENOUS THIN
/home/username/src/t0107/Portal/5mm portal
谢谢你的回复让我试试,我已经更新了我的演示代码,我有点困惑,如果我弄错了,请告诉我目标目录结构是什么。@RyanSorry,互联网在这里造成了痛苦,让我检查一下,让你知道我们可以用这个聊天吗?@guichaoI非常感谢你,在这上面停留了2天,谢谢一百万