当前位置: 首页 > 面试题库 >

如何解释Python 3.6中的str.maketrans函数?

鲜于峰
2023-03-14
问题内容

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

值得庆幸的是,我找到了使用他人协助的另一种方法。但是,我不太确定它是如何工作的。有人可以str.maketrans向我解释该功能吗,引号中的前两个空白参数是做什么用的?我的想法是说:对于文件名的前两个字符,删除所有数字(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()

我对文档的理解:

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

就是说,传递给的参数str.maketrans以及实际的函数str.maketrans将组成一个表,上面写着:“如果出现此字符,则用该字符替换它”。但是,我不确定括号是用来做什么的。

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

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

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

我有三个论点('', '','0123456789')。我认为x是第一''y第二''。我有第三个参数,它是一个字符串'0123456789',但是我不明白映射到的含义'None'


问题答案:

str.maketrans构建一个转换表,该转换表是整数或字符到整数,字符串或的映射None。可以将其视为字典,其中的键表示输入字符串中的字符,而它们映射的值表示输出字符串中的字符。

我们遍历该字符串,将映射中作为键显示的所有内容替换为映射中的值,如果映射值为,则将其删除None

您可以使用一个,两个或三个参数构建一个转换表(我认为这可能会让您感到困惑)。有一个参数:

str.maketrans({'a': 'b', 'c': None})

您为该函数提供一个映射,该映射遵循转换表的规则,并且该函数返回该映射的等效表。映射到的内容None已删除

有两个参数:

str.maketrans('abc', 'xyz')

您给它两个字符串。第一个字符串中的每个字符都被第二个字符串中该索引处的字符替换。所以'a'映射到'x''b''y''c''z'

您正在使用的带有三个参数的参数与两个参数相同,但是具有第三个字符串。

str.maketrans('abc', 'xyz', 'hij')

除了删除第三个字符串中的字符,就像将它们映射到一样,这与两个参数的版本相同None。因此,您的表说的是“不要替换任何内容,而是删除此字符串中显示的字符”。



 类似资料:
  • 本文向大家介绍解释PHP中的array_merge()函数。,包括了解释PHP中的array_merge()函数。的使用技巧和注意事项,需要的朋友参考一下 在本文中,我们将学习array_merge(),这是一个预定义的PHP数组函数。array_merge()用于将至少两个以上的数组组合为一个数组。利用该功能将至少两个数组的组件组合在一起成为一个数组。 此函数以一种方式将一个或多个数组的元素合并

  • 本文向大家介绍PHP中imagick函数的中文解释,包括了PHP中imagick函数的中文解释的使用技巧和注意事项,需要的朋友参考一下 imagick的:: adaptiveBlurImage - 增加了自适应模糊滤镜图像  imagick的:: adaptiveResizeImage - 自适应调整图像数据依赖三角  imagick的:: adaptiveSharpenImage - 自适应锐化

  • 让我们举这个例子 js编译器知道所有的函数声明,所以我可以在< code > main < code > main(second())内部调用< code>second。我不明白递归函数是如何在函数声明内部调用同一个函数的 我的思考过程是:好吧,这是函数声明,这是函数所做的,但是如何 即使声明没有完成,我也可以调用相同的函数

  • 问题内容: 为简单起见,请设想这种情况,我们有一台2位计算机,它具有一对称为r1和r2的2位寄存器,并且仅适用于立即寻址。 假设位序列 00 表示 添加 到我们的CPU中。也 01 的装置将数据移动到R 1和 10组 的装置将数据移动到R2。 因此,这台计算机和一个汇编器都有一种汇编语言,其中的示例代码将像 简而言之,当我将此代码汇编成本地语言时,文件将类似于: 上面的12位是以下代码的本机代码:

  • 问题内容: 我在下面有一个基本问题,可以帮助您理解python中的函数(紧接着uni的LPTHW教程)。有人可以解释以下语法,以及我的假设是否正确? 据我所知,是函数的名称,但什么是具有目的,括号旁边?是调用 下面的print命令吗?还是这些字符串直接进入命令? 问题答案: 将arg1,arg2放在括号中的目的是什么? 在这种情况下,和称为 arguments 。参数允许函数接收 输入 它的预期,

  • 下面的两个查询给出了一些输出, 我不了解工作流程。它是如何输出的。谁能帮我解释一下吗。