我使用的是Python 3.6,而课程导师使用的是Python 2.7。为了简化学习过程,我应该使用Python 2.7。但是,现在我仍然会继续使用Python 3.6。
导师重命名文件的方法是使用“.translate”函数,在Python 2.x中需要两个参数,而在Python 3.x中只需要一个参数。它会从文件名中删除任何数字(0到9)。
import os
def rename_files(): #Obtain the file names from a folder.
file_list = os.listdir(r"C:\Users\Dennis\Desktop\OOP\prank\prank")
print (file_list)
saved_path = os.getcwd()
os.chdir(r"C:\Users\Dennis\Desktop\OOP\prank\prank")
for file_name in file_list: #Rename the files inside of the folder.
os.rename(file_name, file_name.translate(None, "0123456789"))
os.chdir(saved_path)
rename_files()
然而,在Python 3.x中这种方法行不通,因为它会提示:
TypeError: translate() takes exactly one argument (2 given)
谢天谢地,我找到了另一种方法,得到了别人的帮助。然而,我并不确定它是如何工作的。有人能向我解释一下str.maketrans
函数吗?以及引号中的前两个空白参数是用来干什么的?我的想法是:对于文件名中的前两个字符,删除任何数字(0到9)。这正确吗?例如,在"48athens"
中,如果它们是0到9之间的数字,则删除前两个字符(4和8)。
import os
def rename_files(): #Obtain the file names from a folder.
file_list = os.listdir(r"C:\Users\Dennis\Desktop\OOP\prank\prank")
print (file_list)
saved_path = os.getcwd()
os.chdir(r"C:\Users\Dennis\Desktop\OOP\prank\prank")
for file_name in file_list: #Rename the files inside of the folder.
os.rename(file_name, file_name.translate(str.maketrans('','','0123456789')))
os.chdir(saved_path)
rename_files()
我的文档理解:
static str.maketrans(x[, y[, z]])
这个静态方法返回一个可用于str.translate()
的翻译表。
它表示传递给str.maketrans
的参数以及实际函数str.maketrans
将生成一张表,表明“如果出现这个字符,则用这个字符替换它”。然而,我不确定方括号是什么意思。
如果只有一个参数,它必须是一个字典,将Unicode序数(整数)或字符(长度为1的字符串)映射到Unicode序数、字符串(任意长度)或None。然后,字符键将转换为序数。
它表示它只能更改整数或长度为1的字符串中的字符,将其更改为其他整数或字符串(任何长度都可以)。但我认为我有三个参数,而不是一个。
如果有两个参数,它们必须是等长的字符串,在结果字典中,x中的每个字符将被映射到y中相同位置的字符。如果有第三个参数,它必须是一个字符串,其中的字符将在结果中被映射到None。
我有三个参数('', '', '0123456789')
。我认为x
是第一个''
,而y
是第二个''
。我有第三个参数,它是一个字符串'0123456789'
,但我不理解将其映射到'None'
的含义。