重命名文件名同时还创建副本?

时间:2017-11-23 16:50:09

标签: python filesystems

我花了最后4个小时试图解决这个问题。我正在从网站下载图像并将其存储在Users / Temp中。我想要做的是,在下载图像时,检查临时文件夹以查看是否已存在具有相同名称的文件夹。如果有,则使用f字符串和计数器重命名它们,但仍然下载并保存它们。

 for bmp in bmp_list:
        fullfilename = os.path.join(f'{dl_location}', f'{bmp}')
        dl_link = url + bmp
        urllib.request.urlretrieve(dl_link, fullfilename)

        if os.path.isfile(fullfilename):
            print('file already exists, renaming.')
            os.rename(fullfilename, f'copy{c}-{fullfilename}')
            c =+1
        else: None

我知道我的代码正在创建文件,然后检查它是否存在,显然它就在那里,因为我只是复制它,但我很困惑。 非常感谢帮助!

编辑:当我运行此代码时,我收到错误消息

FileNotFoundError: [Errno 2] No such file or directory: '/Users/Home/Temp/CW/monty-python-(1).bmp' -> 'copy1-/Users/Home/Temp/CW/monty-python-(1).bmp'

1 个答案:

答案 0 :(得分:2)

问题似乎是您使用copy{c}绝对路径添加前缀。请改用后缀:

os.rename(fullfilename, f'{fullfilename}-copy{c}')

此外,您需要在下载之前重命名现有文件。下载后为时已晚,原始文件已经消失。因此,请在下载步骤之前移动if语句。

最后,使用简单后缀的一个缺点是它在文件扩展名.bmp之后。一个简单的补救措施可能是两次使用f'{fullfilename}-copy{c}.bmp' as the new name, with the drawback that there will be 。bmp`。如果这对您来说是一个问题,那么您可以做更多的工作,分割基本名称和扩展名,并使用基本名称格式化所需格式的新名称。