python中的str函数列出文件名带a的文件_如何解释Python 3.6中的str.maketrans函数?

我目前正在参加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()

但是,这在Python 3.x中不起作用,因为它说:

TypeError: translate() takes exactly one argument (2 given)

值得庆幸的是,我找到了另一种方式使用某人's assistance. However, I'我不确定它是如何工作的 . 有人可以向我解释 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()

My Understanding of the Documentation:

static str.maketrans(x [,y [,z]])此静态方法返回可用于str.translate()的转换表 .

它说传递给 str.maketrans 的参数以及实际的函数 str.maketrans 会产生一个表格,但是,我不确定括号的含义 .

如果只有一个参数,则它必须是将Unicode序数(整数)或字符(长度为1的字符串)映射到Unicode序数,字符串(任意长度)或无的字典 . 然后将字符键转换为序数 .

它说它只能将整数或长度为1的字符串中的字符更改为其他整数或字符串(任意长度) . 但我相信我有三个论点,而不是一个 .

如果有两个参数,它们必须是长度相等的字符串,并且在结果字典中,x中的每个字符将映射到y中相同位置的字符 . 如果有第三个参数,则它必须是一个字符串,其结果中的字符将映射到None .

我有三个参数 ('', '', '0123456789') . 我认为 x 是第一个 '' , y 是第二个 '' . 我有第三个参数,它是一个字符串 '0123456789' ,但我不明白映射到 'None' 意味着什么 .

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值