根据前缀列表有条件地重命名多个子文件夹中的多个文件
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]
最后,我需要读取列表中的每个项目(txt
和 png
)并查看 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
我有一个包含多个子文件夹的路径,以及具有不同扩展名的文件。 现在,我为每个文件类型(不同扩展名的文件)制作了不同的列表
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]
最后,我需要读取列表中的每个项目(txt
和 png
)并查看 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