【问题标题】:Rename multiple files in Python from another list从另一个列表重命名 Python 中的多个文件
【发布时间】:2019-01-18 01:59:12
【问题描述】:

我正在尝试重命名另一个列表中的多个文件。就像从列表 ['_1','_2'] 中将 test.wav 重命名为 test_1.wav。

import os
list_2 = ['_1','_2']
path = '/Users/file_process/new_test/'
file_name = os.listdir(path)

for name in file_name:
   for ele in list_2:
      new_name = name.replace('.wav',ele+'.wav')
      os.renames(os.path.join(path,name),os.path.join(path,new_name))

但结果错误显示“FileNotFoundError: [Errno 2] No such file or directory: /Users/file_process/new_test/test.wav -> /Users/file_process/new_test/test_2.wav

但是,文件夹中的第一个文件已更改为 test_1.wav,但其余文件未更改。

【问题讨论】:

    标签: python-3.x


    【解决方案1】:

    您正在循环使用总列表的第一个文件。您必须在单个 for 循环中同时输入 listfilename

    这可以使用zip(file_name, list_2) 函数来完成。

    这将重命名文件并附加通过列表发送的任何内容。我们只需要确保列表和文件数量始终相等。

    代码:

    import os
    list_2 = ['_1','_2']
    path = '/Users/file_process/new_test/'
    file_name = os.listdir(path)
    
    for name, ele in zip(file_name, list_2):
        new_name = name.replace(name , name[:-4] + ele+'.wav')
        print(new_name)
        os.renames(os.path.join(path,name),os.path.join(path,new_name))
    

    【讨论】:

    • 谢谢!非常感谢!
    【解决方案2】:

    你的算法有错误。

    您的算法首先通过外循环 (for name in file_name),然后在内循环中,将文件 test.wav 替换为 test_1.wav。在这一步,没有名为test.wav的文件(已经被替换为test_1.wav);但是,您的算法仍然会尝试将名为 test.wav 的文件重命名为 test_2.wav;当然也找不到!

    【讨论】:

    • 谢谢!非常感谢!
    猜你喜欢
    • 1970-01-01
    • 2011-10-02
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-03-08
    • 2019-11-02
    • 2023-03-10
    • 1970-01-01
    相关资源
    最近更新 更多