<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></E></r>
TXT Dateien lesen
- 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
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
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.
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.
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
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
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
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
- __blackjack__
- User
- Beiträge: 13006
- 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.
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
- __blackjack__
- User
- Beiträge: 13006
- 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
- 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
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
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
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
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...