2017-06-01 8 views
1

だから、私は、Python 3に連結された文字列を実行しようとしているPythonで)(EXECするとそれが働きました。この関数は最終的に、ループが現在の月までカウントする(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")) 

exec()は、(信頼できる入力を除く)好かれていないようにしかし、StackOverflowの上で私の広範な研究にそれはそうです。したがって、私はこれをより良くする方法を知りたいですか?私は多くの辞書が好きであることがわかって、私はこれを試してみましたが、それは私だけでなく、文字列与えるだろう:

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

execの代わりにstr.formatを使用して関数を実行し、ファイル名を作成しないのはなぜですか?

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

あなたの答えJean-Francoise FabreのMerci。私はそれをテストし、これは完全に正常に動作します。 +1、私は十分な評判を得るとき。 – ccasimiro9444

+0

ccasimiro9444 @あなたはすでに答えを受け入れることができます。これは、任意の権限は必要ありません:) –

+0

それを受け入れ、私はこれに新しい:) – ccasimiro9444