Außer der nicht gezeigten Methode `get_scooters` ist da nichts, was lange dauern würde.
Was das Format in mypathCity.txt? Das ist doch hoffentlich nicht wirklich Python-Code, den Du hier versuchst mit literal_ast zu parsen? Ein sinnvolles Datenformat wäre json.
`self.safe` sieht aus, als ob es nur lokal verwendet wird, falls nicht, ist das ein grober Designfehler.
Bei `scooter` und `scooter2` ist der Aufruf identisch, so dass der nur einmal im Code vorkommen sollte. Statt einer zufälligen Zahl 1000 auf k zu addieren, um die Liste zu unterbrechen, gibt es `break`.
Die Klammern um if sind unnötig. Die while-Schleife sollte eine for-Schleife über die Einträge der Liste sein, die am besten nicht `list` heißt, weil das der Name des eingebauten Typs ist.
Niemals nackte `except´ benutzen, sondern nur die Fehler, die man auch erwartet, abfangen und verarbeiten.
Was soll den im try-Block in `savedata` schief gehen, wo doch im `except`-Block fast das selbe gemacht wird? Außer der City-Variable, die kein String sein könnte, dann geht aber an anderer Stelle schon etwas schief. Das aktuelle Datum sollte nur EINMAL statt vier mal ermittelt werden, sonst bist Du im Zweifel ein Jahr in die Vergangenheit gereist. `os.makedirs` hat ein Argument, dass es bei existierenden Verzeichnissen keinen Fehler gibt. `self.name` scheint wieder nur ein lokaler Name zu sein.
Mit dem Rückgabewert von `savedata` wird gar nichts gemacht.
So könnte das aussehen (ungetestet):
Code: Alles auswählen
def optimumstart(self, City):
with open(f"mycity{City}.txt", encoding="utf-8") as data:
scooter_data = ast.literal_eval(data.read())
scooters = None
for scooter in scooter_data:
scooter2 = self.get_scooters(scooter[0], scooter[1], self.token)
if scooters is None:
scooters = scooter2
else:
scooters += scooter2
if len(scooters) < 10:
print(f"Unfortunately there are no data for {City} city yet.")
return
self.savedata(City, scooters)
def savedata(self, City, scooters):
current_datetime = datetime.datetime.now()
file_path = os.path.join(
self.BASE_DIR,
'data',
self.operator,
City,
current_datetime.strftime('%Y'),
current_datetime.strftime('%m'),
current_datetime.strftime('%d'),
current_datetime.strftime('%H'),
f"{self.operator}_{City}_{current_datetime:%Y%m%d-%H%M%S}.json"
)
os.makedirs(os.path.dirname(file_path), exist_ok=True)
with open(file_path, 'w', encoding="utf-8") as f:
json.dump(scooters, f)
return 'error' not in scooters