如何使用python重命名多个文件?

时间:2015-06-07 18:32:57

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

我有很多编程经验,但这是我的第一个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。

3 个答案:

答案 0 :(得分: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)

答案 1 :(得分:1)

您的代码错误,因为您没有提供args,因此sys.argv[1]会产生IndexError,您需要使用cmd提示符中的dir名称调用脚本而不是双击它:

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)

  1. 检查缩进。第二个nullptr循环没有正确缩进。
  2. for

    您没有正确迭代。 Python中的for i in file_list: file_list[i] = prevName循环就像您可能从其他编程语言中了解到的for循环。 foreach中的i实际上为您提供了列表的元素,因此您应该这样做 for i in file_list

    虽然修改你当前正在迭代的集合并不是非常pythonic,也不是一个好主意。