代码之家  ›  专栏  ›  技术社区  ›  Levent Ozbek

尝试重命名目录中的所有文件时出现FileNotFoundError

  •  0
  • Levent Ozbek  · 技术社区  · 4 年前

    我正在编写一个python脚本来重命名给定文件夹中的所有文件。python脚本存在于 j-l-classifier 随着 images/jaguar 文件。我正在尝试运行以下脚本以获取文件夹中的每个文件并将其重命名为此格式:

    jaguar_[#].jpg

    但它抛出了以下错误:

    Traceback (most recent call last):
      File "/home/onur/jaguar-leopard-classifier/file.py", line 14, in <module>
        main()
      File "/home/onur/jaguar-leopard-classifier/file.py", line 9, in main
        os.rename(filename, "Jaguar_" + str(x) + file_ext)
    FileNotFoundError: [Errno 2] No such file or directory: '406.Black+Leopard+Best+Shot.jpg' -> 'Jaguar_0.jpg'
    

    import os
    
    
    def main():
        x = 0
        file_ext = ".jpg"
    
        for filename in os.listdir("images/jaguar"):
            os.rename(filename, "Jaguar_" + str(x) + file_ext)
            x += 1
    
    
    if __name__ == '__main__':
        main()
    
    2 回复  |  直到 4 年前
        1
  •  1
  •   d19mc    4 年前

    为了使用 os.rename() ,您需要提供绝对路径。

    os.rename(os.path.expanduser(f"~/{whatever folders you have here}/images/jaguar/{filename}"), os.path.expanduser(f"~/{whatever folders you have here}/images/jaguar/Jaguar_{str(x)}{file_ext}")

    os.path.expanduser() 允许您使用“~”语法来帮助abs文件路径。

        2
  •  1
  •   Joran Beasley    4 年前

    os.listdir 只返回文件名(不是文件路径…)

    尝试以下操作

    for filename in os.listdir("images/jaguar"):
        filepath = os.path.join("images/jaguar",filename)
        new_filepath = os.path.join("images/jaguar","Jaguar_{0}{1}".format(x,file_ext))
        os.rename(filepath, new_filepath)
    

    直言不讳几乎总是通往幸福生活的一条道路