IndexError + leere Datei

Code-Stücke können hier veröffentlicht werden.
Antworten
Zauberweib
User
Beiträge: 13
Registriert: Montag 2. Januar 2023, 12:17
Wohnort: Franken
Kontaktdaten:

Hallo,

Ich habe in einem Ordner mehrere Dateien, die ich alle öffnen, eine Zeile rauskopieren und in einer txt-Datei sammeln will. Anschließend soll diese txt-Datei direkt geöffnet werden.
Wie man sieht, hab ich ein try-except drin. Es gab nämlich immer die IndexError-Fehlermeldung im Terminal - die Daten wurden dennoch korrekt in der txt-Datei gesammelt. Daher dieses quick&dirty-handling. Lieber wärs mir allerdings, wenn mir jemand erklären könnte, warum ich diesen Fehler habe, bzw. wie ich den ausmerzen kann. Es gibt definitiv jeweils mehr als zwei splits; "IndexError" kanns also nicht wirklich sein?

Das zweite Problem: Die Datei wird zwar am Ende geöffnet, aber sie ist leer. Öffne ich die Datei "per Hand", sind alle Daten da. Nur im Pluma wird kein Inhalt angezeigt.
Wenn Pluma allerdings vorher schon geöffnet ist, wird alles richtig angezeigt.
Kann mir da wer helfen?

Code: Alles auswählen

#!/usr/bin/python3.10
# coding=utf-8

import os
jm = input('jjjj/mm angeben: ')

PFAD = f'/media/ich/daten/projekt/{jm}'
sammeln = open(f'{PFAD}/sammeln.txt', 'a')

daten = os.listdir(f'/media/ich/daten/projekt/{jm}')
for i in sorted(daten):      
    if i.endswith('.html'):  
        suchen = open(f'{PFAD}/{i}', 'r')
        zeile = suchen.read()
        suchen.close
    try:
        liste = zeile.split('class="stat">')
        liste = liste[1].split('</tr>')[0]
        sammeln.write(f'{liste}</tr>')
    except IndexError:
        pass

sammeln.close

os.system(f'pluma {PFAD}/sammeln.txt')
Ambitionierte Anfängerin, die sich bei jedem Erfolgserlebnis ein Loch in Bauch freut :)
__deets__
User
Beiträge: 14539
Registriert: Mittwoch 14. Oktober 2015, 14:29

Keiner kennt deine Daten, darum kann man das nicht abschliessend beantworten. Aber du hast halt einiges an Annahmen da drin, die passen muessen. Statt einfach nix zu machen wuerde ich mir mal mindestens den Dateinamen ausgeben lassen, und dann kannst du die Datei mal inspizieren, warum's da kracht.

Ein weiterer wichtiger Hinweis: statt open/close benutzt man das with-statement, das schliesst die Datei gleich mit. Und tut das auch wirklich. Denn ohne () bewirkt dein close-Statement so gar nichts. Das hat aber nix mit dem Fehler an sich zu tun.

Und wenn du schon PFAD baust, warum benutzt du das nicht im listdir?
Benutzeravatar
__blackjack__
User
Beiträge: 13103
Registriert: Samstag 2. Juni 2018, 10:21
Wohnort: 127.0.0.1
Kontaktdaten:

@__deets__: Das mit dem `close()` kann durchaus ein/das Problem sein, denn es wird ja zum Schluss ein externes Programm aufgerufen das mit der Datei arbeiten soll die nicht geschlossen ist, und dementsprechend auch nicht vollständig geschrieben sein muss, wenn da noch Daten im Ausgabepuffer liegen. Die Beschreibung klingt sehr danach, wenn hinterher die Daten aber in der Datei zu sehen sind wenn man sie von Hand öffnet.

@Zauberweib: Der Teil wo der `IndexError` ignoriert wird, wird für *jeden* Dateinamen ausgeführt, nicht nur für die, die mit ".html" enden. Das heisst da werden dann entweder Daten von vorherigen Dateien mehrfach geschrieben, oder das löst einen NameError aus, weil `zeile` im ersten Schleifendurchlauf nicht definiert ist. Das funktioniert vielleicht zufällig, ist aber wahrscheinlich nicht so gedacht.

Namen in Grossbuchstaben sind für Konstanten. Wenn man eine Benutzereingabe in den Wert rein formiert, ist es keine Konstante.

Pfade setzt man nicht mit Zeichenkettenoperationen zusammen, da können schnell kaputte Pfade entstehen. Dafür gibt es das `pathlib`-Modul.

`sammeln` und `suchen` sind keine guten Namen für Datei-Objekte. Die Namen beschreiben Tätigkeiten, die Dateiobjekte tun aber nichts. Tätigkeiten verwendet man für Funktionen und Methoden als Namen, damit man weiss was die tun, und um sie leicht von eher passiven Objekten unterscheiden zu können.

`i` ist ein extrem schlechter Name für *alles* was keine ganze Zahl ist. Insbesondere wenn das auch noch der Name einer Schleifenlaufvariablen ist.

Statt selbst die Endung zu prüfen könnte man gleich mit `glob()` nach Namen mit der ".html" suchen.

Den kompletten Inhalt einer HTML-Datei `zeile` zu nennen ist gewagt. Es ist nicht unmöglich, aber schon irgendwie recht unwahrscheinlich.

Das mit dem `split()` um etwas zwischen zwei Begrenzern auszuschneiden ist nicht wirklich leicht zu lesen/verstehen, weil das nicht das ausdrückt was man eigentlich macht. Die Endmarkierung erst zu entfernen, um sie dann wieder an das Ergebnis anzuhängen ist auch nicht schön.

`os.system()` hat in der Dokumentation einen Hinweis auf das `subprocess`-Modul. *Das* verwendet man um externe Programm zu starten.

Ungetestet:

Code: Alles auswählen

#!/usr/bin/python3.10
import subprocess
from pathlib import Path

ENCODING = "utf-8"
PFAD = Path("/media/ich/daten/projekt")
AUSGABEDATEINAME = "sammeln.txt"

PREFIX = 'class="stat">'
ENDMARKIERUNG = "</tr>"


def main():
    verzeichnis_name = input("jjjj/mm angeben: ")

    pfad = PFAD / verzeichnis_name
    ausgabedateipfad = pfad / AUSGABEDATEINAME

    with ausgabedateipfad.open("a", encoding=ENCODING) as ausgabedatei:
        for html_dateipfad in sorted(pfad.glob("*.html")):
            if html_dateipfad.is_file():
                dateiinhalt = html_dateipfad.read_text(encoding=ENCODING)
                try:
                    startindex = dateiinhalt.index(PREFIX) + len(PREFIX)
                    endindex = dateiinhalt.index(
                        ENDMARKIERUNG, startindex
                    ) + len(ENDMARKIERUNG)
                except IndexError:
                    print(f"Kein treffer in {html_dateipfad}")
                else:
                    ausgabedatei.write(dateiinhalt[startindex:endindex])

    subprocess.run(["pluma", str(ausgabedateipfad)], check=True)


if __name__ == "__main__":
    main()
Wobei das natürlich alles andere als robust ist HTML mit Zeichenkettenoperationen zu verarbeiten statt einen HTML-Parser zu verwenden.
„All religions are the same: religion is basically guilt, with different holidays.” — Cathy Ladman
Sirius3
User
Beiträge: 17749
Registriert: Sonntag 21. Oktober 2012, 17:20

Das Defaultencoding bei Python3 ist utf8, die Angabe ist also überflüssig.
Pfade sind keine Strings, die man mit Stringformatierung bearbeiten sollte, dafür gibt es das pathlib-Modul.
Nur Konstanten schreibt man komplett gross, PFAD ist aber keine Konstante.
Beim Öffnen von Textdateien sollte man immer ein Encoding angeben.
`i` für einen Dateinamen ist ein bescheuerter Variablenname. Mit `i` assoziiert man immer inen Laufindex.
Der if-Block ist zu kurz. Wenn es sich nicht um eine HTML-Datei handelt, dann wird die Zeile der letzten Datei genommen, oder es gibt einen NameError, wenn es sich um die erste Datei handelt und `zeile` noch gar nicht definiert ist.
`suchen` ist ein bescheuerter Name für ein Dateiobjekt, das würde man eher mit einer Funktion assoziieren.
`zeile` ist gar keine Zeile, sondern der komplette Dateiinhalt.
`liste` ist dann beim zweiten Mal gar keine Liste mehr, sondern ein String.
Dateien müssen auch geschlossen werden, damit der Inhalt auch geschrieben wird.
os.system benutzt man nicht, statt dessen subprocess.run

Code: Alles auswählen

#!/usr/bin/python3.10
from pathlib import Path
import subprocess

PROJEKT_PFAD = Path('/media/ich/daten/projekt')

def main():
    datum = input('jjjj/mm angeben: ')
    pfad =  PROJEKT_PFAD / datum
    ausgabedatei = pfad / 'sammeln.txt'
    with ausgabedatei.open('a', encoding='utf8') as ausgabe:
        for dateiname in pfad.glob('*.html'):
            inhalt = dateiname.read_text(encoding='utf8')
            liste = inhalt.split('class="stat">')
            if len(liste) > 1:
                relevanter_teil = liste[1].split('</tr>')[0]
                ausgabe.write(f'{relevanter_teil}</tr>')
            else:
                print(f"Fehler in Datei {dateiname}.")
    subprocess.run([pluma, ausgabedatei])

if __name__ == "__main__":
    main()
Zauberweib
User
Beiträge: 13
Registriert: Montag 2. Januar 2023, 12:17
Wohnort: Franken
Kontaktdaten:

Wow, die Hilfe hier ist ja mächtig beeindruckend! Vielen Dank!

Ja, ich hab mir die Datei natürlich tausendmal angeguggt und rumprobiert. So kams auch, dass ich den "PFAD" nicht ins listdir übernommen habe.
Aus einem der Python-Bücher, nach denen ich gelernt habe, habe ich übernommen, dass die Variable für den Pfad beim Umgang mit Dateien immer großgeschrieben wird. Möglicherweise hab ich da was falsch verstanden.

Dass die Klammer nach close() fehlt - das hab ich tatsächlich übersehen :roll: und genau das war auch der Grund, warum die txt-Datei im Anschluss "leer" geöffnet wurde - weil sie eben noch nicht wirklich geschlossen war. Damit ist das Rätsel zumindest mal gelöst.

Dass ich das </tr> erst wegsplitte und dann wieder dranhänge, liegt daran, dass das der letzte gemeinsame Nenner ist - den ich aber eben in meinem Ausschnitt auch wieder brauche. Deshalb isses zunächst die Schnittkante und wird dann wieder drangeflickt. Nicht schön, aber funktional.

Eure Hinweise @Sirius3 und @__blackjack__ sind... definitiv abendfüllend! Auch dafür vielen Dank. Ich glaub, bis ich das alles durch und kapiert habe, hab ich mehr gelernt als in den letzten zehn Wochen zusammen.

Ich hab mir das Programm schritt- und testweise aufgebaut, langsam vorgetastet (deshalb blieb z.B. auch der "ausgeschriebene" Pfad drin), bis es schließlich funktioniert hat, bis auf die genannten ... naja, ich nenns mal "Schönheitsfehler".

Code: Alles auswählen

liste = liste[1].split('</tr>')[0]
IndexError: list index out of range
Das ist die Fehlermeldung und ich weiß definitiv, dass in jeder Datei nach dem <tr> noch was kommt, ein "out of range" also einfach nicht stimmt. Daher meine Verwirrung - zumal ja trotzdem alles richtig in die txt-Datei geschrieben wird.

"with open as" - das hab ich in Verbindung mit dem "for" nicht hinbekommen, war für mich so rum die einfachere Lösung. Und "subprocess" hatte ich auf der Suche nach einer Lösungsmöglichkeit auch auf dem Radar, aber nicht wirklich kapiert. *schäm* Wenn ich ganz ehrlich bin, war ich sogar ein wenig überrascht, dass das mit dem os.system... gleich so richtig erschien (mit der close-Klammer funktionierts jetzt auch wirklich "einfach so").

Eure beiden Vorschläge werde ich auf jeden Fall durcharbeiten und würde mich freuen, wenn ihr bei meinen weiteren Fragen dazu (die sicher auftauchen werden) wieder antworten würdet. Kann wohl etwas dauern, weil ich dafür wirklich Ruhe und nen freien Kopf brauche - ihr habt mir da schließlich echt jede Menge Arbeitsmaterial aufgelegt!

Also nochmals vielen herzlichen Dank, auf sone umfassende Reaktion/Hilfe war ich absolut nicht gefasst. Wow!
Ambitionierte Anfängerin, die sich bei jedem Erfolgserlebnis ein Loch in Bauch freut :)
Benutzeravatar
__blackjack__
User
Beiträge: 13103
Registriert: Samstag 2. Juni 2018, 10:21
Wohnort: 127.0.0.1
Kontaktdaten:

Bei der Zeile mit dem `IndexError` sind *zwei* Indexzugriffe — einmal die 1 auf `liste` und dann die 0 beim Ergebnis vom `split()`-Aufruf. Aus der Meldung erkennt man nicht welcher von beiden Zugriffen nicht funktioniert hat. Kann auch sein, das `liste` bereits das Problem darstellt falls 'class="stat">' nicht in der Datei vorkommt. Und zwar *exakt* so. Wie gesagt ist das verarbeiten von HTML mit Zeichenkettenoperationen nicht so wirklich robust. Da könnte noch ein Leerzeichen vor dem ">" stehen, oder es gibt mehrere Attribute auf dem Element und die sind in der Datei in einer anderen Reihenfolge, so dass `class` nicht als letztes steht, oder der Wert ist in einfache statt in doppelte Anführungszeichen eingefasst, oder…
„All religions are the same: religion is basically guilt, with different holidays.” — Cathy Ladman
Zauberweib
User
Beiträge: 13
Registriert: Montag 2. Januar 2023, 12:17
Wohnort: Franken
Kontaktdaten:

Es kommt vor, dass nach dem 'class="stat">' eine neue Zeile beginnt - ich hab mal ein paar Testläufe durchgeführt, und die Fehlermeldung kommt genau deswegen - offenbar "verzählt" sich python dadurch, was mir auch irgendwie einleuchtet.
Ok, damit weiß ich, woher der Fehler kommt - meine beiden ursprünglichen Anfragen sind somit geklärt. Was aber nicht bedeutet, dass ich meine Hausaufgaben damit durch habe... das fängt jetzt erst an :-)
Vielen lieben Dank nochmals!
Ambitionierte Anfängerin, die sich bei jedem Erfolgserlebnis ein Loch in Bauch freut :)
Zauberweib
User
Beiträge: 13
Registriert: Montag 2. Januar 2023, 12:17
Wohnort: Franken
Kontaktdaten:

Ich bin eure Vorschläge jetzt durchgegangen, Blackjack deins _würde_ funktionieren, wenn das PREFIX z.b. nur "class" heißen würde - mit den nicht-Buchstaben (=">) gibts Probleme, ohne die erhalte ich aber nicht den gewünschten Ausschnitt.
Dafür hat das von Sirius3 geklappt (nachdem ich "pluma" noch in Anführungszeichen gesetzt habe).

PATH hatte ich bei meinem Code deshalb fälschlicherweise groß geschrieben, weil ich da die Variable nochmal mit drin hatte - wenns wirklich ein "nur Pfad" gewesen wäre, dann wärs mit dem Großschreiben schon korrekt gewesen, richtig?

Das mit dem encoding hab ich kapiert, werd ich künftig berücksichtigen. Und das "subprocess" - dass das mit "os" gar nichts zu tun hat, hab ich dank eurer Beispiele auch begriffen. Bei der Suche nach einer entsprechenden Lösung bin ich da natürlich drüber gestolpert, aber hatte das irgendwie so verstanden, dass suprocess zu os gehört (also "from os import subprocess") und das hat nicht geklappt. Jetzt weiß ich auch, warum :-)

pathlib/Path und glob gefällt mir auf jeden Fall viel besser als mein "Hauptsache funktioniert"-Gestöpsel!

Variable "i" sollte hier tatsächlich besser durch einen "richtigen" Namen ersetzt werden und auch bei den anderen Variablen habt ihr mir ja beide praktische gleichlautendene Namen genannt, auch da werd ich mehr drauf achten.

Ihr habt beide aus meinem Programm eine Funktion gemacht, die ihr mit einem geschützten Aufruf versehen habt. Hm, wäre für meinen "Hausgebrauch" wohl eher nicht nötig, aber grundsätzlich vielleicht nicht dumm, sich sowas gleich von Anfang an richtig anzugewöhnen - es sei denn, ein externer Aufruf ist explizit gewollt.

Wie neulich schon gesagt, es war in euren Antworten sehr viel input für mich und ich hab einiges dazugelernt.

Vielen lieben Dank nochmals!
Ambitionierte Anfängerin, die sich bei jedem Erfolgserlebnis ein Loch in Bauch freut :)
Benutzeravatar
__blackjack__
User
Beiträge: 13103
Registriert: Samstag 2. Juni 2018, 10:21
Wohnort: 127.0.0.1
Kontaktdaten:

@Zauberweib: Ob Buchstabe oder andere Zeichen ist der `index()`-Methode völlig egal:

Code: Alles auswählen

In [157]: PREFIX = 'class="stat">'

In [158]: ENDMARKIERUNG = "</tr>"

In [159]: dateiinhalt = '... class="stat">interessanter Teil</tr> ...'

In [160]: startindex = dateiinhalt.index(PREFIX) + len(PREFIX)

In [161]: endindex = dateiinhalt.index(ENDMARKIERUNG, startindex) + len(ENDMARKIERUNG)

In [162]: startindex, endindex
Out[162]: (17, 40)

In [163]: dateiinhalt[startindex:endindex]
Out[163]: 'interessanter Teil</tr>'
„All religions are the same: religion is basically guilt, with different holidays.” — Cathy Ladman
Zauberweib
User
Beiträge: 13
Registriert: Montag 2. Januar 2023, 12:17
Wohnort: Franken
Kontaktdaten:

Habs nochmal genauer untersucht, es sind tatsächlich nicht die nicht-Buchstaben, sondern dass direkt nach dem '>' eine neue Zeile beginnt, ist das eigentliche Problem. Die Index-Methode kommt für diesen Fall also nicht infrage - dennoch hab ich dank dir eine für mich neue Möglichkeit kennengelernt und durch deine Beispiele genügend Material, das anderweitig auszuprobieren und - naja, eben zu lernen. *freu*
Ambitionierte Anfängerin, die sich bei jedem Erfolgserlebnis ein Loch in Bauch freut :)
Benutzeravatar
__blackjack__
User
Beiträge: 13103
Registriert: Samstag 2. Juni 2018, 10:21
Wohnort: 127.0.0.1
Kontaktdaten:

Auch das ist kein Problem für `index()`:

Code: Alles auswählen

In [166]: dateiinhalt = '... class="stat">\ninteressanter Teil</tr>\n...'

In [167]: print(dateiinhalt)
... class="stat">
interessanter Teil</tr>
...

In [168]: startindex = dateiinhalt.index(PREFIX) + len(PREFIX)

In [169]: endindex = dateiinhalt.index(ENDMARKIERUNG, startindex) + len(ENDMARKIERUNG)

In [170]: startindex, endindex
Out[170]: (17, 41)

In [171]: dateiinhalt[startindex:endindex]
Out[171]: '\ninteressanter Teil</tr>'
Warum sollte das auch ein Problem sein?
„All religions are the same: religion is basically guilt, with different holidays.” — Cathy Ladman
Zauberweib
User
Beiträge: 13
Registriert: Montag 2. Januar 2023, 12:17
Wohnort: Franken
Kontaktdaten:

Nein, das funktioniert leider nicht, in der Datei steht der Text eben so drin:

Code: Alles auswählen

... class="stat">
interessanter Teil</tr>
und da funktioniert auch kein _\n_. Wenn ich nur _class_ schreibe, das geht, mitten in der Zeichenkette abbrechen (z.B. _class="sta_) geht nicht. Es hängt mE damit zusammen, dass hier eben genau an der Stelle eine neue Zeile anfängt. Wär ja cool gewesen, wenn das mit _\n_ funktioniert hätte ;-)
Trotzdem nochmal vielen Dank!
Ambitionierte Anfängerin, die sich bei jedem Erfolgserlebnis ein Loch in Bauch freut :)
Sirius3
User
Beiträge: 17749
Registriert: Sonntag 21. Oktober 2012, 17:20

@Zauberweib: bitte zeige exakt den Code, den Du ausgeführt hast und welches Problem bei Dir genau auftritt; denn genau der Inhalt, Den Du hier beschreibst, neue Zeile zwischen ">" und "interessanter" hat __blackjack__ ja in seinem Beispielcode auch, und dort gibt es keine Probleme.
Benutzeravatar
grubenfox
User
Beiträge: 430
Registriert: Freitag 2. Dezember 2022, 15:49

Möglicherweise könnte auch die Codierung vom Umbruch ('\n' oder '\r\n' oder '\r') in der Datei das Problem bzw. ein Teil des Problems sein...
Benutzeravatar
__blackjack__
User
Beiträge: 13103
Registriert: Samstag 2. Juni 2018, 10:21
Wohnort: 127.0.0.1
Kontaktdaten:

@grubenfox: Beim Beispiel nicht, weil der Zeilenumbruch ja nur in den Daten vorkommt, nicht in dem Textteil nach dem mit `index()` gesucht wird. Problematisch wäre es, wenn beispielsweise *in* dem Tag wo das `class`-Attribut definiert ist ein Zeilenumbruch vorkommt, oder eben irgend etwas was nicht exakt mit dem gesuchten Textfragment übereinstimmt.

Aber da wäre die Lösung ja sowieso HTML nicht mit Zeichenkettenoperationen verarbeiten zu wollen, sondern das robust mit einem HTML-Parser zu machen, so dass einem solche Abweichungen in der Kodierung des an sich gleichen Inhalts nicht auf die Füsse fallen.
„All religions are the same: religion is basically guilt, with different holidays.” — Cathy Ladman
Zauberweib
User
Beiträge: 13
Registriert: Montag 2. Januar 2023, 12:17
Wohnort: Franken
Kontaktdaten:

Blackjack hat dir die Antwort ja schon gegeben, im html-Dokument beginnt da halt einfach eine neue Zeile. Und da ich (naja, eigentlich ja Sirius :-) ) ja eine andere Möglichkeit gefunden hat, wie es funktioniert, isses mE nicht angebracht, euch deswegen weiterhin die Köpfe zum Rauchen zu bringen ;-) Meine Anfangsfragen sind geklärt und gelöst. Und ich hab so zweidrei Sachen noch dazugelernt - also besser gehts nicht, sag ich mal so!
Ambitionierte Anfängerin, die sich bei jedem Erfolgserlebnis ein Loch in Bauch freut :)
Benutzeravatar
Kebap
User
Beiträge: 687
Registriert: Dienstag 15. November 2011, 14:20
Wohnort: Dortmund

Zauberweib hat geschrieben: Samstag 7. Januar 2023, 22:40 pathlib/Path und glob gefällt mir auf jeden Fall viel besser als mein "Hauptsache funktioniert"-Gestöpsel!
Dann warte mal ab, bis du dir irgendwann wirklich einen HTML-Parser anschaust, anstatt hier das Rad neu zu erfinden.. :mrgreen:
MorgenGrauen: 1 Welt, 8 Rassen, 13 Gilden, >250 Abenteuer, >5000 Waffen & Rüstungen,
>7000 NPC, >16000 Räume, >200 freiwillige Programmierer, nur Text, viel Spaß, seit 1992.
Zauberweib
User
Beiträge: 13
Registriert: Montag 2. Januar 2023, 12:17
Wohnort: Franken
Kontaktdaten:

*schmunzel* eins nachm Andern...
aber mal dumm gefragt, gibts in python eine Bibliothek, die html "kann"? Also extra dafür da ist?
Ambitionierte Anfängerin, die sich bei jedem Erfolgserlebnis ein Loch in Bauch freut :)
Sirius3
User
Beiträge: 17749
Registriert: Sonntag 21. Oktober 2012, 17:20

Bei Python kommt html.parser mit, kann man aber nicht nutzen, deshalb installiert man sich normalerweise BeautifulSoup

Code: Alles auswählen

from pathlib import Path
from bs4 import BeautifulSoup
import subprocess

PROJEKT_PFAD = Path('/media/ich/daten/projekt')

def main():
    datum = input('jjjj/mm angeben: ')
    pfad =  PROJEKT_PFAD / datum
    ausgabedatei = pfad / 'sammeln.txt'
    with ausgabedatei.open('a', encoding='utf8') as ausgabe:
        for dateiname in pfad.glob('*.html'):
            inhalt = dateiname.read_text(encoding='utf8')
            html = BeautifulSoup(inhalt)
            relevanter_teil = html.find(class_="stat")
            if relevanter_teil:
                ausgabe.write(str(relevanter_teil))
            else:
                print(f"Fehler in Datei {dateiname}.")
    subprocess.run([pluma, ausgabedatei])

if __name__ == "__main__":
    main()
Zauberweib
User
Beiträge: 13
Registriert: Montag 2. Januar 2023, 12:17
Wohnort: Franken
Kontaktdaten:

ok, gugg ich mir am Wochenende nochmal genauer an. beautifulsoup hab ich zumindest schon mal gehört...
Ambitionierte Anfängerin, die sich bei jedem Erfolgserlebnis ein Loch in Bauch freut :)
Antworten