如何使用 python 重命名多个文件?
How does one rename multiple files using python?
我有很多编程经验,但这是我的第一个 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 window 闪烁并消失,并且 none 的文件名已更改。任何帮助将不胜感激,如果这是一个非常明显的错误,我深表歉意,我的 python 水平目前相当 n00b。
你的代码错误,因为你没有提供任何参数,所以 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
returns 一个列表,因此只需对其进行迭代,您无需创建列表并附加到它。
for i in file_list:
也会使每个 i
成为文件名而不是索引,这样会导致另一个错误,但如上所述你不需要这样做。
- 检查你的缩进。第二个
for
循环缩进不正确。
for i in file_list:
file_list[i] = prevName
您没有正确迭代。 Python 中的 for
循环类似于您可能从其他编程语言中了解到的 foreach
循环。 i
in for i in file_list
实际上给了你列表的元素,所以你应该这样做
for i in range(len(file_list)):
file_list[i] = ......
尽管修改您当前正在迭代的集合不是很 pythonic 也通常不是一个好主意。
除了@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 != 'Whosebug.py': # Mention .py file so that it doesnt get renamed
newName = '00' + file_list[i]
os.rename(prevName, newName)
我有很多编程经验,但这是我的第一个 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 window 闪烁并消失,并且 none 的文件名已更改。任何帮助将不胜感激,如果这是一个非常明显的错误,我深表歉意,我的 python 水平目前相当 n00b。
你的代码错误,因为你没有提供任何参数,所以 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
returns 一个列表,因此只需对其进行迭代,您无需创建列表并附加到它。
for i in file_list:
也会使每个 i
成为文件名而不是索引,这样会导致另一个错误,但如上所述你不需要这样做。
- 检查你的缩进。第二个
for
循环缩进不正确。 for i in file_list: file_list[i] = prevName
您没有正确迭代。 Python 中的
for
循环类似于您可能从其他编程语言中了解到的foreach
循环。i
infor i in file_list
实际上给了你列表的元素,所以你应该这样做for i in range(len(file_list)): file_list[i] = ......
尽管修改您当前正在迭代的集合不是很 pythonic 也通常不是一个好主意。
除了@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 != 'Whosebug.py': # Mention .py file so that it doesnt get renamed
newName = '00' + file_list[i]
os.rename(prevName, newName)