Согласно вашему комментарию, вы можете получить eval
для правильной обработки символов, локальных для какого-либо модуля, передав соответствующий диктант местных жителей в eval
вместе с вашей строкой.Вот работоспособное решение:
import pandas as pd
def getlocals(obj, lcls=None):
if lcls is None: lcls = dict(locals().items())
objlcls = {k:v for k,v in obj.__dict__.items() if not k.startswith('_')}
lcls.update(objlcls)
return lcls
x = "[123,DatetimeIndex(['2018-12-04','2018-12-05', '2018-12-06'],dtype='datetime64[ns]', freq='D')]"
lcls = getlocals(pd)
result = eval(x, globals(), lcls)
print(result)
Вывод:
[123, DatetimeIndex(['2018-12-04', '2018-12-05', '2018-12-06'], dtype='datetime64[ns]', freq='D')]
Как Ответственный, я также обязан предупредить вас, что использование eval
для вашего приложения смехотворно небезопасно. есть много обсуждений опасностей eval
, и ни один из них не предполагает, что есть способ полностью смягчить эти опасности.Будьте осторожны, если вы решите использовать этот код.