【Python】字符串‘(25, 140, 39, 143)‘如何变为元组(25, 140, 39, 143)?有哪些方法?

文章目录

  • 一、问题提出
  • 二、解决方法
    • 2.1 tuple()函数
    • 2.2 ast.literal_eval() 函数

一、问题提出

image_name = 'cropped_(25, 140, 39, 143)_obj365_val_000000685822.jpg'
start_idx = image_name.find("(")
end_idx = image_name.find(")")
coordinates = image_name.split('_')[1]
file_name_only = image_name[end_idx + 2:]
file_name_only, coordinates

我的输出结果为:

('obj365_val_000000685822.jpg', '(25, 140, 39, 143)')

坐标提取出来的是’(25, 140, 39, 143)',是一个字符串,我们如何将其转为元组?

二、解决方法

2.1 tuple()函数

new_coordinates = tuple(coordinates)
new_coordinates

我们的输出结果为:

('(',
 '2',
 '5',
 ',',
 ' ',
 '1',
 '4',
 '0',
 ',',
 ' ',
 '3',
 '9',
 ',',
 ' ',
 '1',
 '4',
 '3',
 ')')

直接使用tuple()函数将带有括号的字符串转换为元组时,元组的每个元素会被视为一个字符,而不是数字。在上述示例中,coordinates_str中的括号和数字被视为元组的不同元素,而不是整个元组的元素。

如果您确保输入的字符串中没有其他非数字字符,也可以使用字符串切片来手动提取数字,并将它们转换为整数。例如:

new_coordinates = tuple(map(int, coordinates[1:-1].split(',')))
new_coordinates
(25, 140, 39, 143)

我们的输出类型为:

【Python】字符串‘(25, 140, 39, 143)‘如何变为元组(25, 140, 39, 143)?有哪些方法?_第1张图片

在上述代码中,我们使用字符串切片 [1:-1] 来去掉字符串的括号,然后使用 split(‘,’) 来拆分字符串,并将每个拆分的部分转换为整数。最终得到正确的元组 (25, 140, 39, 143)。

让我们一步步解读这行代码:

  • coordinates: 这是一个字符串变量,其值为 ‘(25, 140, 39, 143)’。它包含了您的坐标信息的字符串形式,其中包含括号和逗号。
  • coordinates[1:-1]: 这是对coordinates字符串的切片操作。[1:-1]表示我们从字符串的索引1(第2个字符)开始取到索引-1(倒数第2个字符)之前的部分,去除了开头和结尾的括号。这样,我们得到的字符串为 ‘25, 140, 39, 143’,其中只包含了坐标的数字部分。
  • coordinates[1:-1].split(‘,’): 接下来,我们使用split(‘,’)方法将刚才得到的字符串以逗号为分隔符进行拆分。这会返回一个包含拆分后的字符串的列表。在这个例子中,我们得到[‘25’, ‘140’, ‘39’, ‘143’]。
  • map(int, coordinates[1:-1].split(‘,’)): 使用map()函数,我们将拆分后的字符串列表中的每个元素都映射到int()函数上。这样,我们将字符串类型的坐标数字转换为整数类型。
  • tuple(map(int, coordinates[1:-1].split(‘,’))): 最后,我们使用tuple()函数将映射后的整数列表转换为元组。这样,我们得到了最终的元组 (25, 140, 39, 143),其中的每个元素都是整数类型。

通过这行代码,您成功将字符串形式的坐标信息 (25, 140, 39, 143) 转换为了一个包含整数的元组,并且可以在后续的处理中使用这个元组。

2.2 ast.literal_eval() 函数

ast.literal_eval()函数可以安全地将字符串转换为相应的Python数据结构,包括元组。

ast(Abstract Syntax Trees,抽象语法树)是Python的标准库之一,用于在Python代码中表示和处理代码的抽象语法结构。抽象语法树是一种树状的数据结构,它以抽象的方式表示代码的结构和语义。它可以帮助我们分析、操作和转换Python代码。

ast模块中包含了多个类和函数,用于将Python代码解析成抽象语法树,并提供了许多工具来处理和分析抽象语法树。以下是ast模块中一些重要的组件和用途:

  1. ast.parse(source, filename=‘’, mode=‘exec’): 这是ast模块中最常用的函数之一。它用于将源代码解析成抽象语法树。source参数是要解析的Python代码字符串,filename参数是用于错误报告的文件名,mode参数表示代码的执行模式。
  2. 抽象语法树节点类:ast模块中定义了多个节点类,每个类代表Python代码的不同语法结构,例如Module、FunctionDef、ClassDef、If、For、Call等等。每个节点类都有相应的属性,用于访问该节点的信息。
  3. ast.NodeVisitor类:这是ast模块中的一个基类,用于遍历抽象语法树。您可以继承ast.NodeVisitor类,并重写其中的方法来定义对抽象语法树节点的处理逻辑。
  4. ast.walk(node): 这是ast模块中的一个函数,用于遍历抽象语法树中的所有节点。它返回一个生成器,可以依次访问每个节点。
  5. ast.dump(node, annotate_fields=True, include_attributes=False): 这是ast模块中的一个函数,用于以字符串形式输出抽象语法树。它可以帮助您了解抽象语法树的结构。
  6. ast.literal_eval(node_or_string): 这是一个函数,用于安全地将字符串或抽象语法树节点转换为相应的Python数据结构。

使用ast模块,您可以在Python中分析代码,例如查找特定的语法结构,生成代码,或者进行代码变换和优化。它在代码静态分析、代码生成和代码转换等领域都有广泛的应用。同时,ast模块也是很多Python代码检查工具和代码重构工具的基础。

import ast

coordinates_str = '(25, 140, 39, 143)'

# 使用ast.literal_eval()将字符串转换为元组
coordinates_tuple = ast.literal_eval(coordinates_str)

print(coordinates_tuple)  # 输出 (25, 140, 39, 143)
print(type(coordinates_tuple))  # 输出 

在这里插入图片描述

在上述代码中,我们首先定义了一个字符串变量coordinates_str,它包含了您的坐标信息的字符串形式。然后,我们使用ast.literal_eval()函数将字符串转换为元组,并将结果保存在coordinates_tuple变量中。最后,我们输出coordinates_tuple的值和类型。

通过上述代码,您可以将字符串形式的坐标信息(25, 140, 39, 143)转换为真正的Python元组对象,方便在后续处理中使用。

你可能感兴趣的:(Python3常用到的函数总结,python,字符串,元组,ast)