【问题标题】:How does one rename multiple files using python?如何使用 python 重命名多个文件?
【发布时间】:2015-08-22 04:56:33
【问题描述】:

我有很多编程经验,但这是我的第一个 python 脚本。我正在尝试将前缀“00”添加到特定文件夹中的所有文件。首先,我读取所有文件的名称并将它们保存在一个数组中。然后我对数组进行排序并添加前缀“00”,然后使用 os.rename 函数,但在此过程中我搞砸了一些东西。

import sys, os

file_list = []

for file in os.listdir(sys.argv[1]):
    file_list.append(file)

 for i in file_list:
    file_list[i] = prevName
    newName = '00' + file_list[i]
    os.rename(prevName, newName)

我在文件夹中有一个 .py 文件,其中包含我要重命名的所有文件。 .py 文件包含上面的脚本。当我双击 .py 文件时,一个 cmd 窗口闪烁并消失,并且没有任何文件名被更改。任何帮助将不胜感激,对不起,如果这是一个非常明显的错误,我的 python 级别目前非常 n00b。

【问题讨论】:

  • 首先,从控制台运行python,而不是双击它,这样你就可以看到它抛出了什么异常。

标签: python file python-3.x append rename


【解决方案1】:

你的代码错误,因为你没有提供参数所以sys.argv[1]会给出一个IndexError,你需要从cmd提示符调用带有目录名的脚本,而不是双击它:

python your_script directory <- argv[1]

或者改代码并指定路径,还需要加入文件名的路径。

path = "full_path"
for f in os.listdir(path):
    curr,new = os.path.join(path,f), os.path.join(path,"00{}".format(f))
    os.rename(curr,new)

os.listdir 返回一个列表,因此只需对其进行迭代,您无需创建列表并附加到它。

for i in file_list: 还会使每个i 成为文件名而不是索引,这样会导致另一个错误,但如上所述,您无论如何都不需要这样做。

【讨论】:

    【解决方案2】:
    1. 检查您的缩进。第二个for 循环没有正确缩进。
    2. for i in file_list: file_list[i] = prevName

      您没有正确迭代。 Python 中的for 循环类似于您可能从其他编程语言中知道的foreach 循环。 for i in file_list 中的 i 实际上为您提供了列表的元素,所以您应该这样做 for i in range(len(file_list)): file_list[i] = ......

      虽然修改你当前正在迭代的集合不是很 Python 也不是一个好主意。

    【讨论】:

      【解决方案3】:

      除了@Padraic 的回答之外,还要对您的代码进行以下更改。

      import sys, os
      
      file_list = []
      
      for f in os.listdir(sys.argv[1]):
          file_list.append(f)
      
      for i in range(len(file_list)):
          prevName = file_list[i]
          if prevName != 'stackoverflow.py':  # Mention .py file so that it doesnt get renamed
              newName = '00' + file_list[i]
              os.rename(prevName, newName)
      

      【讨论】:

      • 非常感谢你们,使用你们的两个建议,脚本完美运行
      • @ErrorMaster,您不需要创建任何列表,您只需要 os.listdir 即可,如果您打算传入目录名称,还需要加入文件的路径
      猜你喜欢
      • 2021-02-20
      • 2015-08-26
      • 1970-01-01
      • 2019-11-02
      • 2015-07-19
      • 2011-01-30
      • 1970-01-01
      • 2022-01-01
      相关资源
      最近更新 更多