繁体   English   中英

如何将多个文件夹中的相似命名文件合并为每个文件名的一个文件夹

[英]How to combine similar named files from multiple folders into one folder for each file name

我有400个文件夹。 在每个文件夹中,我必须深入研究3个其他文件夹,然后在最后一个文件夹中,我有22个不同的文件。 这400个文件夹中的每个文件夹都具有相同的命名文件。 最终,我想创建22个文件夹,每个文件名创建一个,在22个文件夹中的每个文件夹中,我只希望创建名称相同的文件。 由于文件夹不能包含两个相同名称的文件,因此在文件名中添加文件路径的最后6个字符即可解决此问题。

使用下图作为文件示例:

I need an ACO folder with 400 files all of which are labeled i.e., "ACO050168", "ACO150074", "ACO150128"
I need an BDUAL folder with 400 files all of which are labeled BDUAL i.e., "BDUAL050168", "BDUAL150074", "BDUAL150128"
etc..

例如,以下是文件路径,请注意,最后一个文件夹和最后一个文件夹中的第四个文件夹是唯一的

 'C:\\Users\\MBobak\\Documents\\Loop\\Raw Claims Data 050168\\D#CJR\\Y2018M02\\P050168',
 'C:\\Users\\MBobak\\Documents\\Loop\\Raw Claims Data 150074\\D#CJR\\Y2018M02\\P150074',
 'C:\\Users\\MBobak\\Documents\\Loop\\Raw Claims Data 150128\\D#CJR\\Y2018M02\\P150128'

每个文件夹中的22个文件的结构为.csv但没有.csv扩展名。 它们只是files 我附加了一张图片以显示其外观。 在此处输入图片说明

我知道可以在命令行中执行此操作,但是由于每个初始文件夹都有详细信息,因此我找不到此问题的具体示例。

我尝试在python中执行此操作,然后在python中编写了一个小脚本来查找保存22个文件的最终目录:

all_files_dir = r'C:\Users\MBobak\Documents\Loop'

folders = os.listdir(all_files_dir)
ccn_list = [x[-6:] for x in folders]

ccn_file_dir = [r'C:\Users\MBobak\Documents\Loop\Raw Claims Data ' + x + '\D#CJR\Y2018M02\P' + x for x in ccn_list]

但是现在我很难将它们复制/移动到新文件夹中。

所以-没有足够的声誉来评论和索取更多信息。 对我来说,听起来您要复制到同一目标文件夹的结构底部具有相似的文件名?

也就是说,您希望所有ACO文件最终都位于名为ACO的文件夹中??? 文件夹中只能有一个具有该名称的文件。

因此,此第一个版本实际上将覆盖目标文件夹中的所有类似命名文件。 您能否阐明您的真正需求? 即目标文件夹内容和文件名的示例。

# folder.py
import os
import sys
import platform
import shutil

walk_dir = sys.argv[1]

if platform.system() == 'Windows':
    delimiter = '\\'
else:
    delimiter = '/'

print('walk_dir = ' + walk_dir)
print('walk_dir (absolute) = ' + os.path.abspath(walk_dir))

for root, subdirs, files in os.walk(walk_dir):
    print('--\ncurrent = ' + root)

    for filename in files:
        file_path = os.path.join(root, filename)

        print('\t- file %s (full path: %s)' % (filename, file_path))
        target_name = root[root.rfind(delimiter)+2:len(root)]
        if not os.path.isdir(filename):
            os.mkdir(filename)
        target = filename + delimiter + filename + target_name
        shutil.copy2(file_path,target)

这样称呼它:

C:\\Users\\MBobak\\Documents\\python folder.py Loop

如果您可以给我更多信息,我也许可以为您提供更好的答案。

因此,在提出了一些有用的建议并进行了严格的谷歌搜索之后,我在下面提出了我所需的内容。 该脚本将进入每个文件夹,并在将每个文件复制到另一个名为原始文件名的文件夹时重命名每个文件。 最终结果有22个文件夹(如问题所述),每个文件夹有400个文件。 下面的代码包括问题词干的片段。

import os, shutil

dest = r'C:\Users\MBobak\Documents\Target_Folder'
all_folders_dir = r'C:\Users\MBobak\Documents\Staging_Folder'
files_22 = r'C:\Users\MBobak\Documents\Staging_Folder\Raw Claims Data 050069\D#CJR\Y2018M02\P050069' ## pulling list of all the named files 

folders = os.listdir(all_folders_dir)
files = os.listdir(files_22)
ccn_list = [x[-6:] for x in folders]
ccn_file_dir = [r'C:\Users\MBobak\Documents\Raw Claims Data ' + x + '\D#CJR\Y2018M02\P' + x for x in ccn_list]

for file in files:
    for hosp_folder, ccn in zip(ccn_file_dir, ccn_list):
        if not os.path.exists(dest+'\\'+file):
            os.mkdir(dest+'\\'+file)
        shutil.copy(hosp_folder+"\\"+file ,dest +'\\'+ file +'\\'+ file + '_' + ccn)

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM