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


    一、问题提出

    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
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6

    我的输出结果为:

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

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

    二、解决方法

    2.1 tuple()函数

    new_coordinates = tuple(coordinates)
    new_coordinates
    
    • 1
    • 2

    我们的输出结果为:

    ('(',
     '2',
     '5',
     ',',
     ' ',
     '1',
     '4',
     '0',
     ',',
     ' ',
     '3',
     '9',
     ',',
     ' ',
     '1',
     '4',
     '3',
     ')')
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18

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

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

    new_coordinates = tuple(map(int, coordinates[1:-1].split(',')))
    new_coordinates
    
    • 1
    • 2
    (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))  # 输出 
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9

    在这里插入图片描述

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

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

  • 相关阅读:
    安卓App生成签名证书,uniapp生成自有证书打包
    让开发回归简单模式-组件封装
    现代 CPU 技术发展
    [网络工程师]-防火墙-防火墙体系
    微信小程序开发:异步处理接入的生成式图像卡通化
    因为爱情而美
    开源与闭源:AI模型发展的两条路径
    9.13 | day 6 |day 45| to 完全平方数
    gcc中动态库和静态库的链接顺序
    Java 轻松删除PDF指定页、空白页 (免费工具分享)
  • 原文地址:https://blog.csdn.net/wzk4869/article/details/131872700