Python 重命名多个文件夹中的多个文件
所以我有很多文件夹都有一个特定的名字。在每个文件夹中,我有+200个项目。文件夹中的项目具有如下名称:Python 重命名多个文件夹中的多个文件,python,Python,所以我有很多文件夹都有一个特定的名字。在每个文件夹中,我有+200个项目。文件夹中的项目具有如下名称: CT.34562346.246.dcm RD.34562346.dcm RN.34562346.LAO.dcm 还有一些是这种风格的 我现在希望重命名所有文件夹中的所有文件,以便将编号(34562346)替换为文件夹的名称。例如,在名为“1”的文件夹中,其中的文件应为: CT.1.246.dcm RD.1.dcm RN.1.LAO.dcm 因此,只有大量的被替换。是的,所有的文件都是这样的
CT.34562346.246.dcm
RD.34562346.dcm
RN.34562346.LAO.dcm
还有一些是这种风格的
我现在希望重命名所有文件夹中的所有文件,以便将编号(34562346)替换为文件夹的名称。例如,在名为“1”的文件夹中,其中的文件应为:
CT.1.246.dcm
RD.1.dcm
RN.1.LAO.dcm
因此,只有大量的被替换。是的,所有的文件都是这样的。它将是第一个之后的数字。应该重新命名
到目前为止,我已经:
import os
base_dir = "foo/bar/" #In this dir I have all my folders
dir_list = []
for dirname in os.walk(base_dir):
dir_list.append(dirname[0])
这只是列出了所有文件夹的完整路径
dir_list_split = []
for name in dir_list[1:]: #The 1 is because it lists the base_dir as well
x = name.split('/')[2]
dir_list_split.append(x)
这一个提取每个文件夹的名称
然后下一步就是输入文件夹并重命名它们。我有点被困在这里了?在屏幕上拆分每个文件名。并用文件名替换第二项,然后再次加入新文件名的。下面是一些示例代码,演示了这个概念
folder_name = ['1', '2']
file_names = ['CT.2345.234.dcm', 'BG.234234.222.dcm', "RA.3342.221.dcm"]
for folder in folder_name:
new_names = []
for x in file_names:
file_name = x.split('.')
file_name[1] = folder
back_together = '.'.join(file_name)
new_names.append(back_together)
print(new_names)
输出
['CT.1.234.dcm', 'BG.1.222.dcm', 'RA.1.221.dcm']
['CT.2.234.dcm', 'BG.2.222.dcm', 'RA.2.221.dcm']
这也将重命名子目录中的文件:
import os
rootdir = "foo" + os.sep + "bar"
for subdir, dirs, files in os.walk(rootdir):
for file in files:
filepath = subdir + os.sep + file
foldername = subdir.split(os.sep)[-1]
number = ""
foundnumber = False
for c in filepath:
if c.isdigit():
foundnumber = True
number = number + c
elif foundnumber:
break
if foundnumber:
newfilepath = filepath.replace(number,foldername)
os.rename(filepath, newfilepath)
pathlib模块是Python3.4中的新模块,经常被忽略。我发现它通常会使代码比使用os.walk时更简单 在本例中,
.glob('***.')
递归地查看我在名为example
的示例文件夹中创建的所有文件夹和子文件夹。*.*
部分表示它考虑所有文件
我在循环中放入path.parts
,向您展示pathlib为您安排解析路径名
我首先检查字符串常量'34562346'
在每个文件名中的位置是否正确。如果是,那么我只需将其替换为.parts
中的项目,这是文件夹树“向上”的下一级文件夹
然后我可以用新修改的文件名替换.parts
最右边的元素,以创建新的路径名,然后执行重命名
。在每种情况下,如果适合创建一个路径名,我都会显示新的路径名
>>> from pathlib import Path
>>> from os import rename
>>> for path in Path('example').glob('**/*.*'):
... path.parts
... if path.parts[-1][3:11]=='34562346':
... new_name = path.parts[-1].replace('34562346', path.parts[-2])
... new_path = '/'.join(list(path.parts[:-1])+[new_name])
... new_path
... ## rename(str(path), new_path)
... else:
... 'no change'
...
('example', 'folder_1', 'id.34562346.6.a.txt')
'example/folder_1/id.folder_1.6.a.txt'
('example', 'folder_1', 'id.34562346.wax.txt')
'example/folder_1/id.folder_1.wax.txt'
('example', 'folder_2', 'subfolder_1', 'ty.34562346.90.py')
'example/folder_2/subfolder_1/ty.subfolder_1.90.py'
('example', 'folder_2', 'subfolder_1', 'tz.34562346.98.py')
'example/folder_2/subfolder_1/tz.subfolder_1.98.py'
('example', 'folder_2', 'subfolder_2', 'doc.34.34562346.implication.rtf')
'no change'