Seite 2 von 3
Re: txt mail etc
Verfasst: Mittwoch 22. Juli 2020, 07:14
von ganja
Hallo _blackjack_,
ja war falsch eingerückt sonst läuft es, ist nicht perfekt aber in element sind die Files.txt die ich für weitere Bearbeitung brauchen würde.
Jetzt muss ich in element schauen ist die Datei bsp. 12345.txt vorhanden wenn ja die Datei merken oder in eine andere liste schreiben, dann muss ich schauen ist Datei 12346.txt vorhanden wenn ja wieder merken oder in eine andere liste schreiben und dann per email info senden an z.b
1email@, 2@email,3@email,4email
2@email braucht nur die Information Anzahl
anzahl 2
1@email,3@email,4email
anzahl 2
12345.txt vorhanden
12346.txt vorhanden
Ich weiß wirklich nicht wie ich das beschreiben soll, ich möchte nicht die Dateien per Email weiter senden, sondern nur die info Anzahl und den Namen der Datei.
Da es viele Dateien sind und viele Emails, und komme ich da nicht weiter, mehrere Emails greifen immer auf die selbe Datei
Re: txt mail etc
Verfasst: Mittwoch 22. Juli 2020, 07:56
von sparrow
Ich muss mich da __blackjack__ nur anschließen: wenn du dein Problem schon nicht beschreiben kannst, wie willst du es dann in ein Programm übertragen?
So kann man nur generisch antworten: Wenn du dir etwas merken willst, steck es in eine passende Datenstruktur.
Re: txt mail etc
Verfasst: Mittwoch 22. Juli 2020, 08:13
von Sirius3
Um es eindeutig zu schreiben:
Du hast eine Liste an eMails mit Zusatzinformation. Definiere genau, welche zusätzliche Information Du von jeder eMail wissen mußt, um die Aufgabe zu lösen.
Jetzt mußt Du jede Datei nehmen und für jede eMail anhand der Zusatzinformation prüfen, was damit passieren soll (also Dateiname merken, oder einfach nur Anzahl addieren).
Re: txt mail etc
Verfasst: Mittwoch 22. Juli 2020, 15:23
von ganja
@_Sirius_
in der Theorie ist es genau so und so stelle ich es mir vor, aber mir fehlt einfach das Praktische und da habe ich gehofft ihr hier im Python Forum könnt mich ein wenig unterstützen, ich versuche es noch einmal zu beschreiben vielleicht klappt es jetzt und ihr könnt mir Tipps oder bsp. geben wo ich mein vorhaben fertig stellen kann.
Ich kopiere eine HDD mit rsync und erhalte mehrer Ordner mit Unterordnern, in irgend einem Unterordner befinden sich Dateien, es kann eine oder mehrere sein, der Name des Letzten Unterordner fängt mit einer zahl an 1...._irgendwas, die Datei dann auch mit 1...._irgendwas.
Nach dem die Ordner und Unterordner kopiert sind, möchte ich den Inhalt wissen, die Anzahl und die Namen der Dateien.
Mit dem tipp von _Sirius_ glob zu nutzen, denke ich dass ich diese Funktion auch habe ich erstelle eine liste mit dem Inhalt der Unterordner.
Ich weiß auch wie der Unterordner heißen wird also den Anfang 1234_unterordner in dem eine Datei erwartet wird.
Jetzt habe ich 2 Gruppen für Email Versand, Gruppe 1 erhält eine Email nur mit der Anzahl der Dateien, ein Emailempfänger bekommt für mehrere Ordner/Unterordner eine Info mit der Anzahl der Dateien, Gruppe 2 bekommt Anzahl und den Namen der Datei z.b:
Email_Gruppe1 Email_1
Gesamt Anzahl der Dateien 3
Unterodrner 1...._irgendwas = 2 Dateien
Unterodnder 2..._irgendwas = 0 Dateien
Unterordner 3..._irgendwas = 1 Dateien
Email_2
Gesamt Anzahl der Dateien 40
Unterodrner 4...._irgendwas = 30 Dateien
Unterodnder 10..._irgendwas = 5 Dateien.
Unterordner 22..._irgendwas = 5 Dateien
Email_3.
Gesamt Anzahl der Dateien 0
Unterodrner 5...._irgendwas = 0 Dateien
Unterodnder 88..._irgendwas = 0 Dateien
Unterordner 66..._irgendwas = 0 Dateien
Email_Gruppe2
Email_1
Gesamt Anzahl der Dateien 3
1...._irgendwas.txt alle 2 Dateien
hier ist 0 da würde ich vorerst nichts machen
3...._irgendwas.txt
Email_2
Gesamt Anzahl der Dateien 40
4...._irgendwas.txt alle 30 Dateien auflisten
10...._irgendwas.txt alle 5 Dateien auflisten
5...._irgendwas.txt. alle 5 Dateien auflisten
Email_3
hier würde ich vorerst keine Email senden da nichts da
Funktion für rsync habe ich, es tut auch wie es sein soll.
Funktion für Email senden habe ich auch und funktioniert wie es soll.
Wenn ihr mir jetzt immer noch sagt ihr versteht mich nicht dann wandere ich in ein Drittland aus, Deutschland ist in meinem fall das 2 Land
In der Theorie wie bereits gesagt ist es einfach liste mit den Dateien erstellen, dank _Sirius_ habe ich, jetzt komme ich einfach nicht weiter erstelle ich jetzt wieder rum weitere liste pro Email z.b suche in der liste nach 1...._irgendwas wenn Treffer in eine neue liste schreiben dann suche weiter nach 2..._irgendwas wenn Treffer wieder schreiben in die neue liste und dann senden an Email_Gruppe1 Email1, und das gleiche für die 2 Gruppe, oder jetzt aus den ganzen Email Empfängern Wörterbuch erstellen.
Ich bin total durcheinander.
Re: txt mail etc
Verfasst: Mittwoch 22. Juli 2020, 16:57
von Sirius3
@ganja: Du beschreibst zwar, wie das Ergebnis aussehen soll, wie Du aber zu dem Ergebnis kommst nicht. Wie ist also definiert, dass email1 die Unterordner 1,2,3 durchsuchen soll, und email2 die Unterordner 4, 10, 22.
Man könnte zwei Klassen definieren, eine für Dateilisten, die andere für die Anzahl. Die Instanzen der Klassen bekommen die Email-Addresse und eine Liste an Unterordnern, die durchsucht werden sollen. Dann hat jede Klasse eine Methode, die mit jedem Dateinamen gefüttert wird. Die Methode schaut erst einmal, ob die Datei in einem Unterordner liegt, der überwacht werden soll, wenn ja, wird entweder der Zähler um 1 erhöht (die Methode der einen Klasse) oder der Dateiname zu einer Liste hinzugefügt (die Methode der anderen Klasse).
Eine weitere Methode erzeugt zum Schluß den passenden Email-Text.
Re: txt mail etc
Verfasst: Mittwoch 22. Juli 2020, 17:17
von ganja
@Sirius3
Vielen Vielen Dank für deine Erklärung und den Tipp, leider übersteigt es mein können meine Möglichkeiten kurz gesagt ich kann es nicht.
Ich versuche es irgendwie anderst zu lösen vielleicht Shell script oder keine Ahnung im Moment.
Noch einmal Vielen Dank Sirius3 und allen anderen für euere Tipps und Anregungen und Kritik
Re: txt mail etc
Verfasst: Donnerstag 23. Juli 2020, 06:26
von Sirius3
Welche Möglichkeiten konkret? Auch in allen anderen Fällen müsst du dass Problem in viele kleine Teilprobleme unterteilen. Erster Schritt ist es die eMail-Definitionen in irgendeine Datenstruktur zu packen. Zweiter Schritt wäre die Dateien pro Unterverzeichnis in irgendeine Datenstruktur zu packen. Im primitivsten Fall sind beides Wörterbücher mit Listen. Und dann muss man beides irgendwie zusammenbringen. Und ganz zum Schluss erzeugt man aus den gesammelten Daten Emailtexte. Am besten fängst du mit Schritt 1 an und nicht mit allen gleichzeitig.
Re: txt mail etc
Verfasst: Samstag 25. Juli 2020, 11:29
von ganja
Code: Alles auswählen
def txt_liste():
suche =['111_*','123_*','135_*']
mylist = []
p = Path('path')
for txt_file in p.glob('**/*.txt'):
mylist.append(str(txt_file))
for element in my list:
element = element.split('/')
element =element[-1]
print (element)
if 'suche' in element:
print (ja)
else:
print (nein)
#print ('Anzahl', len(mylist))
Wie erstelle ich eine neue liste aus <element>?
Eigentlich ist die ausgäbe von element so wie ich das gerne hätte aber irgendwo ist ein Fehler, ich finde es nicht.
@Sirius3
dein Tipp erst Email Definition, habe mir überlegt ich mach es pro email suche =['111_*','123_*','135_*'], Aber im Moment finde ich nichts auch wenn ich in element nach '111_*' suche wird immer nein ausgegeben.
Re: txt mail etc
Verfasst: Samstag 25. Juli 2020, 16:49
von Sirius3
Was soll denn `suche` sein? Bisher dachte ich, es geht um Unterverzeichnisse?
Eingerückt wird immer noch mit 4 Leerzeichen und nicht mit Tabs.
Funktionsnamen sollten eine Tätigkeit beschreiben, txt_liste ist das nicht.
mylist ist ein generischer nichtssagender Name, was soll darin gespeichert werden?
p ist einbuchstabig und damit auch nichtssagend.›my list‹ ist kein gültiges Python. Und die for-Schleife ist irgendwie falsch eingerückt. Man bearbeitet keine Pfade mit String-Methoden sondern nutzt die von Path, aber dazu muß man auch die Pathobjekte in der List speichern. 'sucht' hat nichts mit der Variable suche zu tun, und ja und nein sind nicht definiert.
Aber das hatten wir ja alles schon. Ich sehe nichts, was Du an __blackjacks__ Anmerkungen umgesetzt hättest, oder auch, dass Du bei Unklarheiten nachgefragt hättest. Es ist schwierig, wenn man keine Fortschritte sieht, weiter zu helfen.
Re: txt mail etc
Verfasst: Dienstag 28. Juli 2020, 18:22
von ganja
Hallo,
@Sirius3 es geht eigentlich um den Inhalt in den Unterverzeichnissen, das mit den Tabs habe ich bei Kate angepasst.
Ist es möglich den unteren Code zu optimieren?
Damit ich nicht 12x glob + rechnen muss, ich habe 3 tage mir bsp. im Netz angeschaut und getestet nur der untere Code gibt mir das was ich will die Anzehl der txt Datein und die Datein.
Code: Alles auswählen
def user1_email():
#txt_dateien = 12121*.txt,12122*.txt,12123*.txt,12124*.txt,12125*.txt,12126*.txt,12127*txt,112128*.txt,12129*.txt,12130*.txt,14561*.txt,15678*.txt
path = '/home/abc/abcd/**/*'
#filelist =[]
files = glob(path + '12121*.pdf', recursive=True) + glob(path + '12122*.pdf', recursive=True) #usw
print (files)
print (len(files))
user1_email()
Re: txt mail etc
Verfasst: Mittwoch 29. Juli 2020, 08:51
von Sirius3
Woher kommen jetzt wieder die Pattern 123* oder 124*? Wie ermittelst Du die, warum gerade die?
Wenn man was mit einer Liste machen will, benutzt man eine Schleife.
Re: txt mail etc
Verfasst: Mittwoch 29. Juli 2020, 16:07
von ganja
Hallo,
@Sirius3 123*,124* usw, sind Dateien die ich in entsprechenden Unterverzeichnissen erwarte.
Mit der Schleife alle Dateien auslesen habe ich hin bekommen aber dann kamm ich nicht weiter nach bestimmten Dateien in der Liste zu suchen. Deshalb dachte ich ich suche nur pro Emailempfänger.
#emailempfänger1 = 12121*.txt,12122*.txt,12123*.txt,12124*.txt
Theoretisch weiß ich was ich tun muss aber praktisch klappt es nicht als Anfänger. Es ist Klar das ich dann 100x die Funktion haben werde für jeden Emailemfänger, wenn es aber dann tut wie es soll, kann ich dann wieder versuchen alles in eine Funktion zu schreiben wie es sein soll, dabei lerne ich auch etwas und werde besser verstehen was ich anpassen oder ändern muss, ich weiß das für euch Profis das Unsinn ist, aber für mich ist es ein weg auch wenn etwas umständlich, versuchen daraus lernen.
Ist es möglich die glob Funktion anzupassen so wie ich im Beitrag 117 gefragt habe?
Re: txt mail etc
Verfasst: Mittwoch 29. Juli 2020, 20:04
von Sirius3
Es verwirrt halt, weil es am Anfang noch Unterverzeichnisse waren und jetzt sind es plötzlich nur noch Dateipattern.
Wenn nun die Regel ist, dass man in allen Unterverzeichnisse .txt- oder .pdf-Dateien mit einem bestimmten Muster suchen muß, dann schreib das halt einfach so:
Code: Alles auswählen
from pathlib import Path
def find_files(path, patterns):
return [p for p in path.rglob('*')
if any(p.match(pattern) for pattern in patterns)
]
path = Path("/home/abc/abcd")
files = find_files(path, ["12121*.txt", "12122*.txt", "12123*.txt", "12124*.txt", "12125*.txt", "12126*.txt", "12127*txt", "112128*.txt", "12129*.txt", "12130*.txt", "14561*.txt", "15678*.txt"])
print(files)
Re: txt mail etc
Verfasst: Donnerstag 30. Juli 2020, 15:23
von ganja
@Sirius3 Vielen Dank.
ist eine multiple suche auch möglich?
z.b.
testA = ["12121*.txt", "12122*.txt", "12123*.txt"]
testB = ["12130*.txt", "14561*.txt", "15678*.txt"]
files = find_files(path, testA, testB)
Ich habe es versucht aber es geht nicht!
Re: txt mail etc
Verfasst: Donnerstag 30. Juli 2020, 16:03
von __deets__
Du kannst nicht einfach etwas zu einer Liste machen & dann dem gleichen Aufruf übergeben. Das funktioniert üblicherweise nicht. Wenn du etwas mehrfach machen willst, benutz eine Schleife & mach es darin.
Re: txt mail etc
Verfasst: Donnerstag 30. Juli 2020, 16:24
von ganja
@__deets__ Vielen Dank, aber genau das ist der Punkt an dem ich nicht weiter komme, ich weiß nicht wie ich das in ein Schleife übergeben soll.
Alle bsp. die ich anschaue und dann versuche bringen mich nicht weiter.
Danke Leute für eure Geduld mit mir.
Re: txt mail etc
Verfasst: Donnerstag 30. Juli 2020, 18:12
von Sirius3
Schleifen gehören halt zu den absoluten Grundlagen. Wenn Du die nicht kannst, dann mußt Du nochmal die entsprechenden Kapitel ein Deinem Lehrbuch durcharbeiten.
Re: txt mail etc
Verfasst: Freitag 31. Juli 2020, 09:33
von ganja
@Sirius3 es ist nicht so das nicht ein Schleife kann, hab ja schon in vorherigen Beiträgen meine bsp gepostet, mein Problem ist das ich im Moment einfach nicht drauf komme es ist irgendwie zu komplex für mich.
Hier verstehe ich es nicht da hilft mir auch kein Buch.
Muss die schleife testA dann testB testC usw. durchlaufen oder test1, eigentlich wäre es am sinnvollsten wenn man nach test2 in der schleife durchläuft oder doch nicht.
Ich komme alleine nicht weiter wenn jemand einen bsp hat das würde mir helfen.
Aber wenn nicht dann trotzten Vielen Dank.
testA = ["12121*.txt", "12122*.txt", "12123*.txt"]
testB = ["12130*.txt", "14561*.txt", "15678*.txt"]
testC = ["15230*.pdf", "15231*.pdf"]
test1 = (["testA", "12121*.txt", "12122*.txt", "12123*.txt"], ["testB", "12130*.txt", "14561*.txt", "15678*.txt"], [usw])
test2 = ("testA", "testB", "testC")
Re: txt mail etc
Verfasst: Freitag 31. Juli 2020, 10:46
von __blackjack__
@ganja: Ich verstehe hier mal wieder die Frage nicht. Und auch der Code/die Daten machen wenig Sinn. Bei `testA`, `testB`, und `testC` könnte man anmerken, dass man Variablennamen nicht durchnummeriert. Denn auch wenn das Buchstaben sind die da an `test` angehängt wurden, läuft das ja letztlich auf nichtssagende fortlaufende Anhängsel für drei Listen hinaus die strukturell die gleichen Daten enthalten.
Bei `test1` scheint dagegen das erste Element in den Listen eine andere Bedeutung zu haben als der Rest — das wären also Informationen die nicht zusammen in eine Liste gehören. Das wäre dann eher jeweils ein Tupel aus dem ersten Element und einer Liste mit den anderen Elementen. Und insgesamt dann in einer Liste und nicht in einem Tupel, denn die Elemente von `test1` haben dann ja wiederum alle die gleiche Bedeutung.
Und bei `test2` stehen dann Variablennamen als Zeichenketten in einem Tupel. Warum?
Re: txt mail etc
Verfasst: Freitag 31. Juli 2020, 10:54
von Sirius3
Wenn Dir Dein jetziges Problem zu komplex ist, dann mußt Du eben Schleifen und verschachtelte Schleifen an einfacheren Beispielen üben. Außerdem ist es für Dein Problem wichtig, auch komplexere Datenstrukturen zu kennen, die solltest Du also auch vorher lernen und an einfacheren Beispielen üben.