@Fimbur: `requests`, `join()` aus `posixpath`, `Updater` und `update` aus `telegram`, und `dispatcher` aus `telegram.ext` werden in der Tat importiert, aber nicht verwendet.
Bei `TELEGRAM_Token` sollte das `Token` auch gross geschrieben sein.
`DATUM` ist keine Konstante. Da wird ins Protokoll dann immer der Zeitpunkt geschrieben an dem das Modul importiert wurde. Da sollte doch wohl aber der jeweils aktuelle Zeitpunkt beim Schreiben der Log-Nachricht stehen.
`upload_log` wird in der Funktion `upload_log()` als Name für ein Dateiobjekt verwendet. Das ist verwirrend.
`log_schreiben` klingt nach einem Funktionsnamen und nicht nach dem Namen an den ein Dateiname gebunden ist.
Was Du da in die Datei schreibst ist komisch. Du hast da etwas das `dateinamen` heisst, und Du hängst mit `os.path.join()` da weitere Pfadteile an. Dann können das aber keine Dateinamen sein, sondern müssen Verzeichnisnamen sein. Und das wird auch nirgends geprüft, ob das tatsächlich Verzeichnisnamen sind und das Sinn macht.
Durch das "\n", das auch per `os.path.join()` ans Ende angehängt wird, endet der Pfad unnötigerweise mit einem Pfadtrenner, und das ist auch für den Leser verwirrend, denn das "\n" gehört ja gar nicht zum Pfad, sondern soll als Zeilentrenner für die Datei hinzugefügt werden. Dann sollte man auch sicherstellen, dass das nirgends im Pfad-/Dateinamen davor vorkommen kann, denn sonst ist diese Datei kaputt.
Bei `files_loeschen()` ist `entfernen` wieder ein komischer falscher Name für Datei- und Verzeichnisnamen. Das löschen berücksichtigt keine Fehler, beispielsweise kann man ja nur leere Verzeichnisse auf diese Art löschen.
`hochladen` ist dann wieder so ein komischer Name für Datei- und Verzeichnisnamen. Diesmal sollten besser nur Dateinamen enthalten sein, denn nur die kann man mit `open()` öffnen. Was mich jetzt total verwirrt, denn bei `upload_log()` durften nur Dateinamen und keine Verzeichnisse in dem `USER_PFAD`-Verzeichnis liegen damit der Sinn macht. Was denn nun?
Die Datei die da versendet wird, wird geöffnet, aber nicht wieder explizit geschlossen. Das ist unsauber.
Zwischenstand (ungetestet):
Code: Alles auswählen
#!/usr/bin/env python3
import os
from datetime import datetime
from telegram.ext import Updater
USER_PFAD = ""
TELEGRAM_TOKEN = ""
CHAT_ID = ""
def upload_log():
zeitstempeltext = datetime.today().strftime("{%d.%m.%Y-%H:%M:%S}")
verzeichnisnamen = sorted(
name
for name in os.listdir(USER_PFAD)
if os.path.isdir(os.path.join(USER_PFAD, name))
)
with open("upload-log.txt", "a", encoding="utf8") as log_datei:
for verzeichnisname in verzeichnisnamen:
if "\n" in verzeichnisname:
raise ValueError(
f"line-ending in directory name {verzeichnisname!r}"
)
log_datei.write(
os.path.join(verzeichnisname, zeitstempeltext) + "\n"
)
def files_loeschen():
#
# TODO Reagiert nicht sinnvoll auf Fehler beim löschen, sondern bricht die
# Schleife dann einfach ab.
#
for name in os.listdir(USER_PFAD):
os.remove(os.path.join(USER_PFAD, name))
def telegram_bot():
dateinamen = sorted(
name
for name in os.listdir(USER_PFAD)
if os.path.isfile(os.path.join(USER_PFAD, name))
)
bot = (
Updater(TELEGRAM_TOKEN, use_context=True).dispatcher.get_instance().bot
)
for dateiname in dateinamen:
with open(os.path.join(USER_PFAD, dateiname), "rb") as datei:
bot.send_document(CHAT_ID, datei)
# upload_log()
# telegram_bot()
# files_loeschen()
Was ich da als nächstes angehen würde, ist den ganzen `os.path`-Kram durch `pathlib.Path` zu ersetzen.