提取字符串中的列表或元组

时间:2016-11-21 12:07:10

标签: python string format

我从通过以太网连接的外部设备获得输入,并且它传递了几个字符串类型的值,例如value = '(2,2)\n'。我想将这些值分配给列表或元组变量,例如final_value = (2,2)。 我正在使用的代码如下:

import socket
sock = socket.socket()
value =sock.recv(buffersize=2048)
formatted_value = eval(value)

我读到我此时使用的 eval 函数来获取列表并不是一种非常安全的方法,因为外部设备可以传递危险的脚本。所以,我想知道是否有任何替代方法,类似于函数int(),它可以用来从字符串中获取整数。

3 个答案:

答案 0 :(得分:4)

使用ast模块literal_eval方法获得更安全的评估

import ast
formatted_value = ast.literal_eval(value)

答案 1 :(得分:1)

如果知道,则输入包含元组

from ast import literal_eval as make_tuple
make_tuple(value)

答案 2 :(得分:0)

很好地提供你可以做的替代方法。

s = '(2, 2)\n'
s = s.strip()
if s.startswith('(') and s.endswith(')'):
    tup = tuple(int(i) for i in s[1:-1].split(','))
    print(tup)

或者如果你想要一个清单

s = '(2, 2)\n'
s = s.strip()
if s.startswith('(') and s.endswith(')'):
    lst = [int(i) for i in s[1:-1].split(',')]
    print(lst)