将许多python变量列表保存到excel表中,同时保持定义变量类型?

Byt*_*hon 17 python parsing vba pandas xlsxwriter

使用xlsxwriter可以将变量保存到现有的excel文件并在之后读取它们,尽管问题是变量在excel文件中存储为字符串.

假设我有各种类型的许多不同变量的列表(pd.datetimerange,pd.df,np.arrays等),如果我将它们保存到excel文件中,变量类型将丢失.

Python脚本也是从我的Excel文件中调用的,因此如果不编写VBA脚本,我就无法更改其中的任何内容.哪个会暂时关闭我的工作簿,转储字符(比如说pickle字符串)并重新打开它.

是否可以从excel文件中检索类型而无需先编写解析函数(这将采用excel字符串并使用等效的变量类型产生)?

tel*_*tel 5

根据您的评论,您可以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)
Run Code Online (Sandbox Code Playgroud)

输出:

[123, DatetimeIndex(['2018-12-04', '2018-12-05', '2018-12-06'], dtype='datetime64[ns]', freq='D')]
Run Code Online (Sandbox Code Playgroud)

作为一名负责人,我也有责任警告您,使用eval您的申请是非常不安全的.目前很多讨论的危险eval,他们都不建议有一个办法彻底减轻这些危险.如果您选择使用此代码,请务必小心.