尝试使用os.rename时出现FileNotFoundError

时间:2019-07-01 15:18:52

标签: python python-3.x

我尝试编写一些代码来重命名文件夹中的某些文件-本质上,它们被列为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')

2 个答案:

答案 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处理新目录和中间目录。