首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >在Python中将字符串解释为其他数据类型

在Python中将字符串解释为其他数据类型
EN

Stack Overflow用户
提问于 2012-01-31 08:30:05
回答 8查看 5.9K关注 0票数 5

我正在将一个文件读入python2.4,其结构如下:

代码语言:javascript
复制
field1: 7
field2: "Hello, world!"
field3: 6.2

其思想是将其解析到一个字典中,该字典将fieldfoo作为键,并将冒号后面的任何内容作为值。

我想要将冒号后面的任何数据类型转换为它的“实际”数据类型,也就是说,'7'应该转换为int"Hello, world!"应该转换为字符串,等等。唯一需要解析的数据类型是整数、浮点数和字符串。在python标准库中有没有一个函数可以让你轻松地进行这种转换呢?

唯一应该用来解析的东西是我写的,所以(至少在这种情况下)安全性不是问题。

EN

回答 8

Stack Overflow用户

回答已采纳

发布于 2012-01-31 08:50:45

对于较旧的python版本,例如所要求的版本,可以使用eval函数,但是,为了减少恶意,应该将作为全局名称空间的dict用作第二个参数,以避免函数调用。

代码语言:javascript
复制
>>> [eval(i, {"__builtins__":None}) for i in ['6.2', '"Hello, world!"', '7']]
[6.2, 'Hello, world!', 7]
票数 2
EN

Stack Overflow用户

发布于 2012-01-31 08:35:13

首先,将您的输入解析为一个类似于fieldN: some_string的配对列表。您可以使用re模块轻松实现这一点,或者使用索引line.strip().find(': ')的左右切分甚至更简单。然后在值some_string上使用文字计算

代码语言:javascript
复制
>>> import ast
>>> ast.literal_eval('6.2')
6.2
>>> type(_)
<type 'float'>
>>> ast.literal_eval('"Hello, world!"')
'Hello, world!'
>>> type(_)
<type 'str'>
>>> ast.literal_eval('7')
7
>>> type(_)
<type 'int'>
票数 6
EN

Stack Overflow用户

发布于 2012-01-31 08:56:16

您可以尝试首先使用内置函数int()将其转换为int。如果不能将该字符串解释为int,则会引发ValueError异常。然后,您可以尝试使用float()转换为float。如果这也失败了,那么只需返回初始字符串

代码语言:javascript
复制
def interpret(val):
    try:
        return int(val)
    except ValueError:
        try:
            return float(val)
        except ValueError:
            return val
票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/9072847

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档