我尝试编写一些代码来重命名文件夹中的某些文件-本质上,它们被列为xxx_(a).bmp
,而它们必须是xxx_a.bmp
,其中a
运行从1到2000。
我已经使用内置的os.rename
函数在循环内交换它们以获得正确的数字,但这给了我FileNotFoundError [WinError2] the system cannot find the file specified Z:/AAA/BBB/xxx_(1).bmp' -> 'Z:/AAA/BBB/xxx_1.bmp'
。
如果有人能指出正确的方向,我将在下面提供的代码包括在内。我已经检查过我在正确的目录中工作,并且它为我提供了期望的目录,所以我不确定为什么找不到该文件。
import os
n = 2000
folder = r"Z:/AAA/BBB/"
os.chdir(folder)
saved_path = os.getcwd()
print("CWD is" + saved_path)
for i in range(1,n):
old_file = os.path.join(folder, "xxx_(" + str(i) + ").bmp")
new_file = os.path.join(folder, "xxx_" +str(i)+ ".bmp")
os.rename(old_file, new_file)
print('renamed files')
答案 0 :(得分:1)
尝试遍历目录中的文件并处理符合您条件的文件。
from pathlib import Path
import re
folder = Path("Z:/AAA/BBB/")
for f in folder.iterdir():
if '(' in f.name:
new_name = f.stem.replace('(', '').replace(')', '')
# using regex
# new_name = re.sub('\(([^)]+)\)', r'\1', f.stem)
extension = f.suffix
new_path = f.with_name(new_name + extension)
f.rename(new_path)
答案 1 :(得分:1)
问题是如果新名称是当前不存在的目录中的文件名,os.rename
不会创建新目录。
为了首先创建目录,可以在Python3中执行以下操作:
os.makedirs(dirname, exist_ok=True)
在这种情况下,目录名可以包含已创建或尚未创建的子目录。
作为替代方案,可以use os.renames
处理新目录和中间目录。