【问题标题】:renaming filenames while also creating a copy?在创建副本的同时重命名文件名?
【发布时间】:2017-11-24 01:11:23
【问题描述】:

在过去的 4 个小时里,我一直在尝试解决这个问题。我正在从网站下载图像并将它们存储在用户/临时。我想要做的是,在下载图像时,检查临时文件夹以查看是否已经存在同名的文件夹。如果有,则使用 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'

【问题讨论】:

标签: python filesystems


【解决方案1】:

问题似乎是您在绝对路径前加上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`。如果这对您来说是个问题,那么您可以做更多的工作,拆分基本名称和扩展名,并使用基本名称将新名称格式化为所需格式。

【讨论】:

  • 然后覆盖原始文件。它还会更改文件扩展名。它会停止错误并运行程序,但随后会覆盖原始文件。
猜你喜欢
  • 1970-01-01
  • 2020-02-03
  • 2019-03-08
  • 1970-01-01
  • 2018-08-21
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-08-17
相关资源
最近更新 更多