我目前正在参加Udacity课程,该课程指导学生使用Python编程.其中一个项目要求学生重命名目录中的照片文件(删除名称中的任何数字),以便按字母顺序排列这些文件,之后将拼写出一条秘密消息.例如,如果一个文件名是"48athens"
,程序会删除这些数字,只留下"athens"
作为文件名.
我使用的是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()
然而,这在Python3中不起作用.x、 正如上面所说:
TypeError: translate() takes exactly one argument (2 given)
谢天谢地,我找到了另一种利用他人帮助的方法.然而,我并不确定它是如何工作的.有人能给我解释一下str.maketrans
函数吗?引号中的前两个空白参数是用来做什么的?我的 idea 是,它的意思是:对于文件名中的前两个字符,删除任何数字(0到9).对吗?例如,在"48athens"
中,如果前两个字符(4和8)是介于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(str.maketrans('','','0123456789')))
os.chdir(saved_path)
rename_files()
My Understanding of the Documentation:
static str.maketrans(x[, y[, z]])
它的意思是,传递给str.maketrans
的参数,以及实际的函数str.maketrans
,将生成一个表,上面写着,"如果出现这个字符,用这个字符替换它."然而,我不确定括号是用来做什么的.
如果只有一个参数,那么它必须是映射Unicode的字典
这意味着它只能将整数或长度为1的字符串中的字符更改为其他整数或字符串(任意长度).但我相信我有三个论点,而不是一个.
如果有两个参数,它们必须是长度相等的字符串,并且
我有三个论点.我认为x
是第一个''
,y
是第二个''
.我有第三个参数,是字符串'0123456789'
,但我不明白映射到'None'
意味着什么.