【问题标题】:Conditional renaming of multiple files from multiple subfolders based on a list of prefix根据前缀列表有条件地重命名来自多个子文件夹的多个文件
【发布时间】:2019-07-31 16:49:17
【问题描述】:

我有一个包含多个子文件夹的路径,以及具有不同扩展名的文件。 现在,我为每种文件类型(不同扩展名的文件)制作了不同的列表

path='/user/path/output'

为每个文件扩展名定义列表

png         =list()
txt         =list()

然后用文件填充我的列表,

 import os
 for (dirpath,dirname,filenames) in os.walk(path):
     txt +=[os.path.join(dirpath,file) for file in filenames if file.endswith("txt") ]
     png +=[os.path.join(dirpath,file) for file in filenames if file.endswith("png") ]

现在列表如下所示,

print(txt)
['/user/path/output/SAP.txt','/user/path/output/LUF.txt']

还有png

['/user/path/output/SAP-tcga-01_scs.png','/user/path/output/LUF-tcga-01_scs.png']

在这里,我有一个前缀列表。这些前缀需要附加到上述文件名列表中。因此,我创建了一个字典,样本名称作为值,前缀作为键。 列表后缀的第一部分:是文件名,第二部分是后缀。列表后缀必须正确,附加到正确的文件名。这就是这里的条件。

suffix  =["SAP_xz","LUF_df"]
prefix_for_files={value.split('_')[0]:value for value in suffix}

然后,我有两个带有路径的文件名列表和一个需要为 2 个列表中的每个文件附加的前缀字典。

为此,我编写了一个 for 循环,就像这样,

  for value,ids in prefix_for_files.items():
        sample_prefix=ids.split('_')[1]

最后,我需要读取列表中的每个项目(txtpng)并查看 prefix_for_files 中的值是否与 lists 中文件名的基本名称匹配。

我被困在这里,任何形式的建议都非常感谢。

最后我需要文件列表,例如png 文件,

 /user/path/output/SAP_xz.png
/user/path/output/LUF_df.png

【问题讨论】:

    标签: python dictionary os.walk


    【解决方案1】:

    您可以使用glob.glob

    import glob
    import os
    
    types = ('*.png', '*.txt') # Stuff to search for
    files = []
    for ftype in types:
        files.extend(glob.glob('/home/chris/dev/output/**/{}'.format(ftype), recursive=True))    
    
    # For me this would produce
    # ['/home/chris/dev/output/blank.txt',
    # '/home/chris/dev/output/b.png',
    # '/home/chris/dev/output/t.png',
    # '/home/chris/dev/output/f2/okay.png',
    # '/home/chris/dev/output/f1/hello.png',
    # '/home/chris/dev/output/f1/goodbye.png']
    

    然后,如果您需要任何具有绝对路径的东西(如果这已经不是您的绝对路径),您可以这样做:

    for f in files:
        abspath = os.path.abspath(f)
        # Rename/delete/etc with abspath
    

    【讨论】:

    • 谢谢!问题,问题不是那么简单,我需要一个if condition,然后再用suffix 重命名每个案例。重命名应基于suffix =["SAP_xz","LUF_df"] 信息。我的意思是我需要从suffix 列表中获取后缀,即xzdf,并附加到path 中的文件,名称为SAPLUF
    猜你喜欢
    • 2014-01-19
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-04-06
    • 2012-08-08
    • 2019-07-23
    • 2015-12-25
    • 1970-01-01
    相关资源
    最近更新 更多