【发布时间】:2016-05-08 13:06:36
【问题描述】:
尝试创建一个简单的代码,在windows中批量重命名一个文件夹。
必须:
改变每个数字,比如“file02.txt”,把02变成0002
可能适用于每种文件格式,如 jpg、png、txt、docx 等(因为我不确定文件夹中的内容,此代码可能用于图像序列...)
这可能吗?
我做了测试版本,结合了我所拥有的小知识,但这让我感到困惑。
到目前为止我的代码:
import os
import sys
folder_path = os.listdir(raw_input("Insert folder path: "))
print "Files in folder: %s" % folder_path
# a split tool
def mysplit(s):
head = s.rstrip('0123456789')
tail = s[len(head):]
return head, tail
# a function to make a new name with needed 0000
def new_filename(filename):
file_name_part, ext = os.path.splitext(filename) # file01 and .ext
original_name, number = mysplit(file_name_part) # 01 and file
add_zero = number.rjust(4, "0") # add 0001
new_name = original_name + add_zero + ext
print new_name
# new_name comes like this ['file0001.txt'] but seperate, not in a list? Why?
for current_file_n in folder_path:
new = new_filename(current_file_n)
print list([new]) # trying to make the str into a list....
re_name = os.renames(current_file_n, new)
print re_name
print "Renamed files: %s" % folder_path
期望的结果与开始列表相同,但用零排序,例如:['file0001.txt', 'file0002.txt', 'file0003.txt'......'file0015.txt ']
我遇到了诸如 windows error: can't find file 和另一个错误之类的错误;无法连接str和list?
我需要尽可能简单地解释我做错了什么,或者我可以使用另一种方法来达到我想要的结果?
【问题讨论】:
-
看起来不对的一件事是您的
new_filename()函数没有显式返回任何内容,因此有效地返回None并且您在它之后的缩进是混乱的。无论直接或间接使用其返回值,这都会导致进一步的错误。 -
您的缩进似乎搞砸了,因为您在代码中混合使用了制表符和空格。最好只使用空格(或将编辑器配置为自动用它们替换制表符)。
-
@martineau 谢谢,我没有意识到空格和制表符可能是个问题