Seite 2 von 2
Re: Aus Ordnerinhalt txt erstellen
Verfasst: Donnerstag 24. März 2022, 17:10
von ganja
Hallo __deets__ das stimmt, bin einfach durcheinander gekommen, durch testen.
Habe es wieder, so wie auch Sirius3 es mir vorgeschlagen hat.
Code: Alles auswählen
for path in INPUT_PATH.rglob('*'):
if path.is_dir():
print (path.name)
Re: Aus Ordnerinhalt txt erstellen
Verfasst: Donnerstag 24. März 2022, 17:26
von ganja
@Sirius3, __deets__ Danke euch,
ich denke ich habe es, es werden auch txt erstellt für den leeren subfolder oben in meinem bsp "samonestozatest/ganjatestsubfolder1/" aber damit kann ich leben.
Vielen Dank
Code: Alles auswählen
for path in INPUT_PATH.rglob('*'):
if path.is_dir():
#print (path.name)
textfiles = [f.name for f in path.glob("*.txt") if f.name != "list.txt"]
output_filename = (OUTPUT_PATH / path.name).with_suffix('.txt')
output_filename.write_text(",".join(textfiles))
Re: Aus Ordnerinhalt txt erstellen
Verfasst: Donnerstag 24. März 2022, 17:51
von Sirius3
Du mußt doch nur pürfen, ob `textfiles` leer ist und dann keine Datei schreiben.
Re: Aus Ordnerinhalt txt erstellen
Verfasst: Donnerstag 24. März 2022, 19:32
von ganja
Danke Sirius3,
habe es jetzt so wie es sein soll, mit (dein Tipp) Prüfung leer oder nicht.
Vielen Dank Sirius3
Re: Aus Ordnerinhalt txt erstellen
Verfasst: Samstag 26. März 2022, 09:44
von ganja
Guten Morgen,
ich frage mal hier, sollte das nicht Ok sein, bitte bescheid geben dann erstelle ich einen neuen Post.
Was kann ich hier besser schöner verbessern?
Die txtfiles lösche ich nach dem die Emails raus sind, eigentlich kann man darauf verzichten die txtfiles zu erstellen, gibt es noch etwas in dem code was man besser machen kann, funkionalität?
Danke euch im Voraus
Code: Alles auswählen
def textpath():
OUTPUT_PATH = Path("/home/ja/meinordner/mein_backup")
INPUT_PATH = Path("/home/ja/meinordner/samonestozatest")
for path in Path(INPUT_PATH).rglob('*'):
if path.is_dir():
textfiles = [f.name for f in path.glob("*.txt")] #if f.name != "list.txt"]
if textfiles:
output_filename = (OUTPUT_PATH / path.name).with_suffix('.txt')
output_filename.write_text(",".join(textfiles))
else:
pass
def mailsout(idemail):
idemails = idemail
for item in idmails:
OUTPUT_PATH = Path(/home/ja/meinordner/mein_backup")
for path in Path(INPUT_PATH).rglob('*txt'):
if path.is_file():
if item[0] in path.name:
#print (item[0], ' , ', path.name, ' , ', item[1])
with open("/home/ja/meinordner/mein_backup/"+path.name) as fp:
msg = MIMEText(fp.read())
me = 'ganja@mail'
msg['Subject'] = 'Anzahl :' +item[0]+'.'
msg['From'] = me
msg['To'] = item[1]
#msg['To'] = (', ').join(anemail.split())
s = smtplib.SMTP('ganjas')
s.send_message(msg)
s.quit()
def main():
textpath()
idemail = []
if idx != None:
rows = #sql_query
for row in rows:
id = row[1]
email = [2]
idemail.append((id, email))
mailsout(idemail)
if __name__ == "__main__":
main()
Re: Aus Ordnerinhalt txt erstel
Verfasst: Samstag 26. März 2022, 10:11
von __deets__
Wie du in ein un demselben Script sowas wie OUTPUT_PATH / path.Name stehen hast (gut), und dann wenige Zeilen später den Pfad mit String Operationen zusasmenstoppelst (großer Mist) wie hier:
open("/home/ja/meinordner/mein_backup/"+path.name)
kann ich nicht nachvollziehen. Gibt es da keinen Impuls, sowas konsistent zu gestalten? Die gleiche Dinge zu benutzen?
Auch
idemails = idemail
ist überflüssig. Benenn doch das Argument, wie du es willst. Es gibt keinen Zusammenhang zwischen dem Namen einer Variable beim aufruf, und dem in der Parameterliste.
Leere else Zweig mit einem pass drin können weg, Konstanten gehören an den Anfang des Programms, und schon muss man die nicht mehrfach deklarieren, und vermeidet inkonsistenzen. Was der Sinn und Zweck von Konstanten ist.
Re: Aus Ordnerinhalt txt erstellen
Verfasst: Samstag 26. März 2022, 11:06
von LukeNukem
ganja hat geschrieben: Donnerstag 24. März 2022, 11:45
Leider bekomme ich den Inhalt nicht so wie ich es mir vorstelle. Ich dachte ich suche hier schon rekursiv, habe Unterordner im Unterordner1 es wird der Inhalt in einer txt erzeugt aber mit dem Namen des ersten Unterordner und nicht Unterordner1.
Im Moment ist mir immer noch nicht ganz klar, was der Unterschied zwischen dem "ersten Unterordner" und "Unterordner1" ist. Sicherlich wäre es ganz sinnvoll, ein besseres Bild davon zu erhalten, wie Deine Ordnerstruktur tatsächlich aussieht. Unter den meisten Linuxen gibt es da ein Paket namens "tree", das -- oh Wunder -- ein Programm namens tree(1) bereitstellt. Dieses Programm erstellt rekursiv eine hübsche Repräsentation Deines Verzeichnisbaums, die Du dann bitte einmal hier posten möchtest -- wenn es sehr viele Dateien und Ordner sind, womöglich auch gekürzt, aber dann jedenfalls so, daß sich die Struktur Deiner Verzeichnisse halbwegs erkennen und nachvollziehen läßt. Zusätzlich wäre es ganz schon, wenn Du einmal auf der Basis dieser Verzeichnisstruktur manuell ein kleines Beispiel erstellst, wie Deine Ausgabedateien aussehen sollen. Vielen Dank und viel Erfolg.
Re: Aus Ordnerinhalt txt erstellen
Verfasst: Samstag 26. März 2022, 11:32
von ganja
Hallo @LukeNukem das vom 24 hat sich ja erledigt, Danke.
Hallo __deets__Vvielen Dank, ich sehe was du mit OTPUT_PATH meinst, werde ich anpassen.
Doch es gibt den Impuls gleiche dinge zu benutzten, deshalb habe ich euch gefragt, leider ist mir nicht ...
Else "pass" mache ich noch weg und "Konstanten gehören an den Anfang des Programms" versuche ich umzusetzen.
Vielen Vielen Dank @__deets__
Re: Aus Ordnerinhalt txt erstellen
Verfasst: Samstag 26. März 2022, 13:21
von Sirius3
@ganja: bevor Du fragst, wie man den Code verbessern kann, sollte der erst einmal überhaupt korrekt sein. Die Einrückungen stimmen nicht, da fehlen Anführungszeichen, es gibt Schreibfehler, `idx` ist nicht definiert. `email` wird eine Liste zugewiesen, was nicht sehr sinnvoll ist.
Das Minimum an eigenem Engagement (das eigene Geschreibsel einmal zu starten) hast Du nicht erfüllt.
Es ist absolut unsinnig, erst alle Verzeichnisse durchzugehen, um Text-Dateien zu erzeugen und dann nochmal alle Verzeichnisse durchzugehen, um diese Text-Dateien wieder einzulesen. Das macht man in einem Schritt und spart sich das Schreiben der Datein.
Code: Alles auswählen
INPUT_PATH = Path("/home/ja/meinordner/samonestozatest")
SENDER = 'ganja@mail'
def collect_text_files(input_path):
for path in input_path.rglob('*'):
if path.is_dir():
textfiles = [f.name for f in path.glob("*.txt")]
if textfiles:
yield path.name, textfiles
def send_mail(smtp, id, email, textfiles):
msg = MIMEText(",".join(textfiles))
msg['Subject'] = f'Anzahl :{id}.'
msg['From'] = SENDER
msg['To'] = email
smtp.send_message(msg)
def send_mails(input_path, emails):
smtp = smtplib.SMTP('ganjas')
for name, textfiles in collect_text_files(input_path):
for id, email in emails:
if id in name:
send_mail(smtp, id, email, textfiles)
smtp.quit()
def main():
emails = sql_query()
send_mails(INPUT_PATH, emails)
if __name__ == "__main__":
main()
Re: Aus Ordnerinhalt txt erstellen
Verfasst: Samstag 26. März 2022, 13:56
von ganja
Hallo @Siries3,
da bin ich bei copy paste verrutscht, habe es nach dem abmelden gesehen, konnte es aber nicht mehr ändern.
Vielen Dank für dein bsp.