python中exec()的真正替代品

时间:2017-06-01 14:12:16

标签: python-3.x

所以,我一直在尝试在Python 3中执行连接字符串并且它有效。此函数最终将进入(while)循环,循环计数到当前月份。

def all_installs_to_dataframe(month):
    '''Imports csv's from different months to pandas dataframes'''
    command = ["dataset = pd.read_csv('/path/file2017", "_overview.csv', sep=',', header=0, encoding='utf-16')"]
    return (command[0] + month + command[1])
exec(all_installs_to_dataframe("05"))

然而,在我对Stackoverflow的广泛研究中,似乎不喜欢exec()(除了值得信赖的输入)。因此,我想知道如何更好地做到这一点?我发现很多人喜欢字典,我试过这个,它也会给我一个字符串:

dict = {'start': "dataset = pd.read_csv('/path/file2017", 'month': "05", 'end': "_overview.csv', sep=',', header=0, encoding='utf-16')"}
exec(dict['start']+dict['month']+dict['end'])

我必须再次exec()。 那么,如何在不使用exec()语句的情况下执行此操作?

@nico:我最初在我的所有文件上都有这个循环(使用日期时间库):

month_date = 3
while month_date - 1<date.today().month:
    dataset = "dataset_%s" % (month_date)
    function = "pd.read_csv('/path/file2017%s_overview.csv', sep=',', header=0, encoding='utf-16')" % (month_date)
    dataset = function
    month_date += 1

然后我意识到我得到一个字符串,它将无法正常工作。所以我现在正在使用exec()功能。但是在我读到的任何地方我都不应该使用它,那么我怎么能绕过这个循环中的exec()函数呢?

1 个答案:

答案 0 :(得分:1)

为什么不在函数中执行命令并使用str.format而不是exec来编写文件名?

def all_installs_to_dataframe(month):
    '''Imports csv's from different months to pandas dataframes'''
    dataset = pd.read_csv('/path/file2017{}_overview.csv'.format(month), sep=',', header=0, encoding='utf-16')