【问题标题】:python file name changepython文件名更改
【发布时间】:2021-01-18 13:40:36
【问题描述】:

我正在尝试更改文件名,如下所示: 000000 是同一个数字。

000000_ABC.png      --->000000+1_ABC.png
000000_DEF.png      --->000000+2_DEF.png
000000_GHI.png      --->000000+3_GHI.png
000000_JKL.png      --->000000+4_JKL.png

为此,我编写了如下代码。

img_files = os.listdir(PATH_TO_PNG_FILES)
for img_file, i in zip(img_files, range(len(img_files))):
    new_img_file = img_file.replace("_", "+"+str(i)+"_")
    os.rename(path + img_file, path + new_img_file)

有不止四个文件和更多类似的行。 问题是,在运行 pycharm 之后,它立即成功地产生了所需的结果,但是在我运行与结果目录相关的另一个页面之后,即使在过程完成后,结果也会像下面这样继续改变。我不明白为什么。

000000+1+1_ABC.png
000000+2+2_DEF.png
000000+3+3_GHI.png
000000+4+4_JKL.png

or 

otherwise "+unexpected number" 

【问题讨论】:

  • 与您的实际问题无关,但您可以使用内置函数enumerate()替换您的zip(range(...
  • 看起来您不止一次地运行了这段代码。 but after I run another page - 你能在你的问题中扩展吗?当您运行另一个页面时,这段代码是否也运行了?

标签: python filenames


【解决方案1】:

这是因为其他目录可能已经包含“000000+1_ABC.png”格式的文件,并且您的脚本正在将_更改为“+1_”,从而导致“000000+1+1_ABC.png”。为了解决这个问题,你可以添加一个 if 语句来检查它不应该包含“+”符号。

img_files = os.listdir(path inside of which the png files are saved)
for img_file, i in zip(img_files, range(len(img_files))):
    if not ("+" in img_file):
        new_img_file = img_file.replace("_", "+"+str(i)+"_")
        os.rename(path + img_file, path + new_img_file)

【讨论】:

  • 非常感谢。你的回答解决了我的问题。
【解决方案2】:

一种简单而幼稚的方法是添加验证以检查文件名中是否有“+”。如果您有其他可能包含 + 的文件,则可能需要检查更严格的模式。

【讨论】:

    【解决方案3】:

    我制作了一个 YouTube 视频 https://youtu.be/K9jhAPZLZLc,介绍了如何重命名多个文件,就像假设所有文件都在同一个目录中一样。

    回答你的问题。假设所有图像文件都在同一个文件夹中。

    path = 'C:\\Users\\USER\\Desktop\\rename_images\\images\\' # path to your images
    files = os.listdir(path)
    
    for count, filename in enumerate(files):
        # Get the file extension
        file, file_extension = os.path.splitext(filename)
    
        # check if the current file is a folder or not
        full_path = f'{path}{filename}'
    
        if os.path.isdir(full_path):
            print('This is a directory')
        elif os.path.isfile(full_path):
            print('This is a normal file')
            # Rename
            if  not '+' in file:
                try:
                    file_split = file.split('_')
                    zeros = file_split[0]
                    alpha = file_split[-1]
                    current_file_name = os.path.join(path, filename)
                    new_file_name = os.path.join(path, ''.join([f'{zeros}+{count}_{alpha}', file_extension]))
    
                    os.rename(current_file_name, new_file_name)
                except:
                    pass
            else:
                pass
        else:
            print('This is a special file')
    
        
        
    

    【讨论】:

      【解决方案4】:

      我想这个问题来自于修改覆盖的名称。

      import os
      DIR_PATH = 'files'
      
      def rename_files(dir_name):
          img_files = os.listdir(dir_name)
          for i in range(len(img_files)):
              file_name = img_files[i].split('_')[-1]
              file_name = '000000+{0}_{1}'.format(i, file_name)
              os.rename(
                  os.path.join(dir_name, img_files[i]),
                  os.path.join(dir_name, file_name)
              )
      
      if __name__ == '__main__':
          rename_files(DIR_PATH)
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2022-12-18
        • 2011-02-23
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2019-03-16
        相关资源
        最近更新 更多