在保持原有目录结构的情况下,将特定文件移动到新目录



我想移动以"cd_"开头的目录(及其子目录和文件)从大量的"ab-"在预定义的源目录中找到的目录:

SRC = '/home/user/source'

到一个新的(目标)目录:

DST = '/home/user/destination'

(部分)的目录结构如下:

home/user/source
ab-0001
cd_data_1
cd_data_2
ef_data_1
gh_data_1
ab-0002
sub_folder
cd_data_1
ef_data_1
ab-0003
sub_folder
cd_data_1
sub_folder_2
cd_data_1
ef_data_1

DST文件夹最初是空的,但在移动文件后,我希望DST和SRC显示如下:

SRC:

home/user/source
ab-0001
ef_data_1
gh_data_1
ab-0002
sub_folder
ef_data_1
ab-0003
sub_folder
sub_folder_2
ef_data_1

DST:

/home/user/destination
ab-0001
cd_data_1
cd_data_2
ab-0002
sub_folder
cd_data_1             
ab-0003
sub_folder
cd_data_1
sub_folder_2
cd_data_1

注意有大量的"ab-"目录(具有可变结构),因此我们不能硬编码每个目录。

到目前为止,我只能够识别需要移动的目录:
for root_dir_path, sub_dirs, files in os.walk(SRC):
for dir in sub_dirs:
if dir.startswith("cd_"):
print("Root Directory Path:", root_dir_path)
print("Sub Directories named 'cd_*':", dir)

我被困在如何解决"ab-"结构的变化。目录的文件移动到DST。

我觉得你快成功了。您正在子目录列表中搜索'cd_',但是您必须查看文件列表。假设您的源文件夹只有所有目录名以"ab-"开头,您可以尝试以下方法:

SRC = 'home/user/source'
DEST = 'home/user/target'
for root_dir_path, sub_dirs, files in os.walk(SRC):
for file_name in files:
if file_name[:3]=='cd_': # 3 because len('cd_')=3 # string slicing
# Your required file with cd_ prefix
src_path = 'home/user'+root_dir_path+file_name
dest_path = src_path.replace(SRC, DEST, 1)
# move file
shutil.move(src_path, dest_path)

希望这是你想要的。

import os
import shutil
SRC = 'home/user/source'
DST = 'home/user/target'
for root_dir_path, sub_dirs, files in os.walk(SRC):
for dir in sub_dirs:
if dir.startswith("cd_"):
src_path = root_dir_path+"/"+dir
dest_path = src_path.replace(SRC, DST, 1)
shutil.move(src_path, dest_path)

相关内容

  • 没有找到相关文章

最新更新