2016-09-09 2 views
0

Привет всем У меня есть простая проблема, но я не найти решение, у меня есть функция, которая возвращает что-то вроде этогопреобразования строки в другой тип в Python

[[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) сказать, что это строка <type 'str'> Я хочу, чтобы создать цикл, чтобы каждый элемент, как этот

пункта 1 [4, 'adr', 0, 0, 1, '2016-04-05T13:00:01']

пункт 2 [115, 'adr', 0, 0, 1, '2016-04-05T14:00:01']

Я пытаюсь преобразовать строку в списке, кортеж ... но ничего не работа, любая идея, как изменить строку любого типа, который я могу сделать петлю и получить детали

когда я пытаюсь преобразовать в кортеже или строки у меня есть этот результат

('[', '[', '4', ',', ' ', "'", 'a', 'd', 'r', "'", ',', ' ', '0', ',', ' ', '0', ',', ' ', '1', ',', ' ', "'", '2', '0', '1', '6', '-', '0', '4', '-', '0', '5', 'T', '1', '3', ':', '0', '0', ':', '0', '1', "'", ']', ',', ' ', '[', '1', '1', '5', ',', ' ', "'", 'a', 'd', 'r', "'", ',', ' ', '0', ',', ' ', '0', ',', ' ', '1', ',', ' ', "'", '2', '0', '1', '6', '-', '0', '4', '-', '0', '5', 'T', '1', '4', ':', '0', '0', ':', '0', '1', "'", ']', ',', ' ', '[', '2', '2', '6', ',', ' ', "'", 'a', 'd', 'r', "'", ',', ' ', '0', ',', ' ', '0', ',', ' ', '1', ',', ' ', "'", '2', '0', '1', '6', '-', '0', '4', '-', '0', '5', 'T', '1', '5', ':', '0', '0', ':', '0', '1', "'", ']', ',', ' ', '[', '3', '3', '7', ',', ' ', "'", 'a', 'd', 'r', "'", ',', ' ', '0', ',', ' ', '0', ',', ' ', '1', ',', ' ', "'", '2', '0', '1', '6', '-', '0', '4', '-', '0', '5', 'T', '1', '6', ':', '0', '0', ':', '0', '1', "'", ']', ']') 
+0

Возможный дубликат [Преобразовать строковое представление списка на список в Python] (http://stackoverflow.com/questions/1894269/convert-string-representation-of-list-to-list-in-python) – JGreenwell

ответ

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

1

самый простой и самый опасный, решение было бы сделать

eval(data) 

опасно, потому что вы должны доверять нет ничего вредоносным в этих данных ,

Вы можете написать регулярное выражение, чтобы убедиться, что строка/данные правильно отформатированы; не зная, что это за формат, я не могу с этим поделать.

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

Вы можете использовать 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) 
Смежные вопросы