TXT Dateien lesen

Wenn du dir nicht sicher bist, in welchem der anderen Foren du die Frage stellen sollst, dann bist du hier im Forum für allgemeine Fragen sicher richtig.
Antworten
jgr
User
Beiträge: 7
Registriert: Donnerstag 6. Dezember 2018, 18:14

<r>Hallo Community,<br/>
<br/>
ich hätte da eine Frage: <E>:D</E> <br/>
<br/>
Ich habe einen kurzen Python Code geschrieben der auch funktioniert. Ich habe ein englisch deutsch dictonary geschrieben.<br/>
Das macht nichts anderes als eine TXT Datei mit <B><s></s>fobj<e></e></B> einzulesen und diese nach einen Wort das mittels Tastatur eingeben wird zu durchsuchen<br/>
und diese Zeile wo sich das Wort befindet (deutsches Wort) auszugeben. Funktioniert auch alles. Aber bei TXT datein mit ca. 65.000 Wörtern mozt der Complier das <br/>
er das file nicht lesen kann. Jetzt meine Frage ist die über fobj eingelesene Datei auf eine Größe beschrenkt na ja wahrscheinlich schon, aber wie groß darf die TXT<br/>
Datei in KB sein? Bzw. gibt es eine Funktion außer fobj um dateien einzulesen. Danke im Voraus<br/>
<br/>
GLG<br/>
<br/>
Joachim <E>:cry:</E></r>
Benutzeravatar
noisefloor
User
Beiträge: 3843
Registriert: Mittwoch 17. Oktober 2007, 21:40
Wohnort: WW
Kontaktdaten:

Hallo,

dein Post ist echt komisch formatiert und dadurch schlecht lesbar - was auch immer da passiert ist.

Zum Problem:
65k Wörter ist jetzt IMHO wirklich viel - wie groß ist die Datei denn?
Und du müsstest mal bitte die _komplette_ Fehlermeldung der Python Interpreters hier posten. "motzt rum" ist keine brauchbare Beschreibung.
Und deinen Code könntest du bitte auch mal posten, um zu sehen, ob da was faul ist.

Gruß, noisefloor
nezzcarth
User
Beiträge: 1632
Registriert: Samstag 16. April 2011, 12:47

Was meinst du denn mit "mit fobj" eingelesen? Man sieht 'fobj' manchmal als (m.M.n. eher schlechten) Namen für Filehandles -- meinst du das? In dem Fall hast du die Datei vmtl. mit "open" eingelesen.

Ansonsten zwei allgemeine Anmerkungen: Große Dateien liest man wenn es geht nicht komplett in den Speicher ein, sondern zum Beispiel zeichen- oder zeilenweise und merkt sich nur das, was man wissen möchte. Das geht in Python sehr einfach. In deinem Fall iterierst du also z.B. nur über die Datei und gibst die betreffende Zeile aus, wenn es einen Treffer gibt. Für solche Suchaufgaben bietet sich (ab einer gewissen Größe) meiner Meinung nach ein invertierter Index, oder etwas Vergleichbares an.
jgr
User
Beiträge: 7
Registriert: Donnerstag 6. Dezember 2018, 18:14

Hallo Leute,

keine Ahnung was da mit der Formatierung falsch gelaufen ist. Das sieht wie HTML Code aus. Aber danke für eure raschen Antworten. Bevor ich weiter herum experimentiere werde ich hier noch den Code und die Compiler Fehlermeldung rein geben. Ich habe den Code aktuell in der Firma. Werde in morgen posten.

glg

Joachim
jgr
User
Beiträge: 7
Registriert: Donnerstag 6. Dezember 2018, 18:14

Hallo Leute,

anbei übermittle ich den Code und die Compiler meldung.

Code:

woerter={}
fobj = open("woerterbuch.txt", "r")
for line in fobj:
line = line.strip()
zuordnung = line.split(" ")
woerter[zuordnung[0]] = zuordnung[1]
fobj.close()
while True:
wort = input("Geben Sie ein Wort ein:")
if wort in woerter:
print("Das deutsche Wort lautet:", woerter[wort])
else:
print("Das Wort ist unbekannt")


Compiler Meldung:

>>>
RESTART: C:\Users\Joachim Gradischnik\Desktop\Programming\source_code\python\Dienstag_04122018\dictonary.py
Traceback (most recent call last):
File "C:\Users\Joachim Gradischnik\Desktop\Programming\source_code\python\Dienstag_04122018\dictonary.py", line 6, in <module>
woerter[zuordnung[0]] = zuordnung[1]
IndexError: list index out of range
>>>

Die Datei ist 2.666 Byte groß.

Ich hoffe ihr könnt was damit anfangen.

glg

Joachim
Benutzeravatar
__blackjack__
User
Beiträge: 13004
Registriert: Samstag 2. Juni 2018, 10:21
Wohnort: 127.0.0.1
Kontaktdaten:

@jgr: Offenbar enthält die Datei mindestens eine Zeile bei der `zuordnung` nur ein Element hat. Also eine Zeile ohne mindestens ein Leerzeichen.

Das Programm würde zudem nicht mit Wortpaaren klar kommen in denen im Deutschen und/oder in der Fremdsprache Leerzeichen vorkommen, weil sich so etwas dann nicht mehr eindeutig auftrennen liesse. Statt selbst Formate zu erfinden, sollte man deshalb besser Standardformate verwenden. Hier beispielsweise eine CSV-Datei.
“Most people find the concept of programming obvious, but the doing impossible.” — Alan J. Perlis
jgr
User
Beiträge: 7
Registriert: Donnerstag 6. Dezember 2018, 18:14

Hallo Leute,

danke für die Information werde es mit einer CSV Datei versuchen. Das Programm funktioniert aber mit Wortgruppierungen.

GLG

Joachim

Ps: Vielleicht gibt es noch eine Antwort, danke
Benutzeravatar
__blackjack__
User
Beiträge: 13004
Registriert: Samstag 2. Juni 2018, 10:21
Wohnort: 127.0.0.1
Kontaktdaten:

@jgr: Wie das denn bitte?
“Most people find the concept of programming obvious, but the doing impossible.” — Alan J. Perlis
Benutzeravatar
noisefloor
User
Beiträge: 3843
Registriert: Mittwoch 17. Oktober 2007, 21:40
Wohnort: WW
Kontaktdaten:

Hallo,

die Fehlermeldung hat rein gar nichts mit der Dateigröße zu tun. Ehrlich gesagt weiß ich auch nicht wie man von "List Index out of range" auf einen Speicherfehler schließt. Den Grund für die Fehlermeldung hat dir __blackjack__ ja schon gesagt: die der Eingabedatei ist die Struktur irgendwo nicht wie von dir vorausgesetzt.

Gruß, noisefloor
jgr
User
Beiträge: 7
Registriert: Donnerstag 6. Dezember 2018, 18:14

Hallo Leute,

ihr habt natürlich recht es hat nichts mit der größe der zugeführten Datenstruktur zu tun sondern mit dem aufbau der zugeführten Daten. Diese waren leider nur einzeilig das war der Fehler.
Danke für alles, Sorry das ich erst so spät geantwortet habe. Danke für die Hilfe jetzt funktioniert es einwandfrei.

glg

Joachim
Benutzeravatar
snafu
User
Beiträge: 6731
Registriert: Donnerstag 21. Februar 2008, 17:31
Wohnort: Gelsenkirchen

jgr hat geschrieben: Freitag 7. Dezember 2018, 09:51 Das Programm funktioniert aber mit Wortgruppierungen.
Falls damit Begriffe mit Leerzeichen gemeint sind: Ja, das wirft keinen Fehler, aber es gibt auch kein sinnvolles Ergebnis. Wenn du nach einem split(" ") auf den Index 0 und den Index 1 zugreifst, dann werden nur die ersten beiden Teile aus der Zeile ins Dictionary übernommen - egal was da steht. Und die restlichen Wörter der Zeile (also die übrigen Teile nach dem Splitten) werden ignoriert. Möglicherweise willst du deine Ergebnisse für Wortgruppen nochmal überprüfen...
Antworten