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

Dan*_*Dan 5 python string parsing python-2.4

我正在将文件读入python 2.4,其结构如下:

field1: 7
field2: "Hello, world!"
field3: 6.2
Run Code Online (Sandbox Code Playgroud)

我们的想法是将其解析为一个字典,该字典fieldfoo作为键,以及冒号之后的任何值作为值.

我想转换无论是冒号后以它的"真实"数据类型,即,'7'应该转换为一个int,"Hello, world!"为一个字符串,等等需要解析的唯一数据类型是整数,浮点数和字符串.python标准库中是否有一个函数可以让人轻松进行这种转换?

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

wim*_*wim 6

首先将您的输入解析为对的列表fieldN: some_string.您可以使用re模块轻松完成此操作,或者甚至可以更简单地使用索引的左右切片line.strip().find(': ').然后在值上使用文字eval some_string:

>>> 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'>
Run Code Online (Sandbox Code Playgroud)

  • @MikeSamuel显然,必须先将输入预处理为“ fieldn:string”对,但这部分并不重要。@ julio.alegria`_`是交互式解释器中最后一个返回值的便捷快捷方式。@Dan ..erm ..现在您告诉我;)升级python?为什么需要使用这样的旧版本? (2认同)

JBe*_*rdo 1

对于较旧的 python 版本,就像所询问的那样,eval可以使用该函数,但是为了减少邪恶,dict应该使用全局命名空间作为第二个参数,以避免函数调用。

>>> [eval(i, {"__builtins__":None}) for i in ['6.2', '"Hello, world!"', '7']]
[6.2, 'Hello, world!', 7]
Run Code Online (Sandbox Code Playgroud)