Also, ich habe versucht, eine verkettete Zeichenfolge in Python 3 auszuführen, und es hat funktioniert. Diese Funktion würde schließlich in eine (while) Schleife gehen, in der die Schleife bis zum aktuellen Monat zählt.Wahre Alternative zu exec() in Python
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"))
jedoch auf meine umfangreiche Forschung auf Stackoverflow scheint es, wie exec()
nicht gemocht wird (außer für vertrauensvolle Eingabe). Daher würde ich gerne wissen, wie man das besser macht? Ich fand, dass viele gern Wörterbücher sind, habe ich versucht, diese und es würde mir auch einen String geben:
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'])
die ich exec()
wieder haben würde. Also, wie könnte ich das tun, ohne die exec()
Aussage zu verwenden?
@nico: Ich hatte zunächst diese Schleife über alle meine Dateien (mit Datumzeit-Bibliothek):
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
Dann wurde mir klar, dass ich einen String zu erhalten, und es wird nicht funktionieren. Also benutze ich jetzt die exec()
Funktion. Aber überall, wo ich lese, sollte ich es nicht benutzen, also wie könnte ich die exec()
Funktion in dieser Schleife umgehen?
Gibt es einen Grund, warum Sie den csv-Pfad nicht direkt senden? Sind die Befehle so unterschiedlich, dass dies nicht funktioniert? Ich versuche besser zu verstehen, was du machen willst. – nico