根据前缀列表有条件地重命名多个子文件夹中的多个文件

Conditional renaming of multiple files from multiple subfolders based on a list of prefix

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

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

您可以使用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