在python中将字符串转换为其他类型

时间:2016-09-09 18:17:39

标签: python python-2.7

大家好我有一个简单的问题但我没有找到解决方案,我有一个返回类似的功能

.operator

当我检查此变量的类型[[4, 'adr', 0, 0, 1, '2016-04-05T13:00:01'], [115, 'adr', 0, 0, 1, '2016-04-05T14:00:01'], [226, 'adr', 0, 0, 1, '2016-04-05T15:00:01'], [337, 'adr', 0, 0, 1, '2016-04-05T16:00:01']] 时,说这是一个字符串type(data) 我想创建一个循环来获取像这样的每个元素

第1项<type 'str'>

第2项[4, 'adr', 0, 0, 1, '2016-04-05T13:00:01']

我尝试转换列表中的字符串,元组...但没有任何工作,任何想法如何将字符串更改为任何类型,我可以循环并获取项目

当我尝试转换元组或字符串时,我有这个结果

[115, 'adr', 0, 0, 1, '2016-04-05T14:00:01']

4 个答案:

答案 0 :(得分:2)

您可以考虑使用literal_eval from ast模块。

In [8]: from ast import literal_eval

In [9]: a = "[[4, 'adr', 0, 0, 1, '2016-04-05T13:00:01'], [115, 'adr', 0, 0, 1, '2016-04-05T14:00:01'], [226, 'adr', 0, 0, 1, '2016-04-05T15:00:01'], [337, 'adr', 0, 0, 1, '2016-04-05T16:00:01']]"

In [10]: type(a)
Out[10]: str

In [11]: b = literal_eval(a)

In [12]: type(b)
Out[12]: list

In [13]: b
Out[13]: 
[[4, 'adr', 0, 0, 1, '2016-04-05T13:00:01'],
 [115, 'adr', 0, 0, 1, '2016-04-05T14:00:01'],
 [226, 'adr', 0, 0, 1, '2016-04-05T15:00:01'],
 [337, 'adr', 0, 0, 1, '2016-04-05T16:00:01']]

然后你有一个正确的列表,可以轻松地迭代它以获得它的元素。

答案 1 :(得分:1)

最简单,最危险的解决方案是

eval( data )

危险,因为你必须相信这些数据中没有恶意。

您可以编写一个正则表达式来验证字符串/数据是否格式正确;不知道那种格式是什么,我无能为力。

答案 2 :(得分:1)

您可以使用ast.literal_eval

import ast
myteststr = "[[4, 'adr', 0, 0, 1, '2016-04-05T13:00:01'], [115, 'adr', 0, 0, 1, '2016-04-05T14:00:01'], [226, 'adr', 0, 0, 1, '2016-04-05T15:00:01'], [337, 'adr', 0, 0, 1, '2016-04-05T16:00:01']]"
pyobj = ast.literal_eval(myteststr)
print(pyobj)

答案 3 :(得分:0)

大家好,我终于解决了这个问题

data = {}
data = {'names': []}
for item in project_name:
  data['names'].append(item)
  data.update({item: {}})
  jobs_running = []
  jobs_pending = []
  for row in all_rows:
    if (str(item) == row[1]):
      parsed_t = dp.parse(str(row[5]))
      t_in_seconds = parsed_t.strftime('%s')

      jobs_running.append([ (t_in_seconds), (row[3]) ])
      jobs_pending.append([ (t_in_seconds), (row[4]) ])
      data[item].update({'jobs_running': jobs_running})
      data[item].update({'jobs_pending': jobs_pending})

所以我的数据结构就像这个see image