2017-06-01 17 views
1

所以,我一直試圖在Python 3中執行一個連接字符串,它工作。這個函數最終會進入(while)循環,在循環中循環計數到當前月份。python中的exec()的真正替代方法

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")) 

然而,在我的#2廣泛的研究好像不喜歡(除了值得信賴的輸入)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()函數?

+0

是不是有一個原因,你不只是直接發送csv路徑?這些命令是否足夠多樣,以至於無法正常工作?我試圖更好地理解你想要做什麼。 – nico

回答

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') 
+0

謝謝您的答案謝謝Francoise法布爾。我測試了它,這工作得很好。 +1,當我獲得足夠的聲望。 – ccasimiro9444

+0

@ ccasimiro9444你已經可以接受答案了。這不需要任何特權:) –

+0

接受它,我是新來的:) – ccasimiro9444