Du verwendest einen veralteten Browser. Es ist möglich, dass diese oder andere Websites nicht korrekt angezeigt werden.
Du solltest ein Upgrade durchführen oder einen alternativen Browser verwenden.
Du solltest ein Upgrade durchführen oder einen alternativen Browser verwenden.
selektiv Daten aus massiver txt Datei löschen
- Ersteller hoerenraph
- Erstellt am
- Registriert
- Jan. 2017
- Beiträge
- 15
Das einzige was ich noch lesen kann bevor sich das skript schließt ist "list index out of range"
wie kann ich das fenster offen lassen?
wie kann ich das fenster offen lassen?
andy_m4
Admiral
- Registriert
- Aug. 2015
- Beiträge
- 7.870
Klingt schwer danach, als ob es irgendwo auch eine Zeile ohne Doppelpunkt gibt und deshalb die index-Methode sozusagen Out-Of-Range zugreifen will, weil das von split erzeugte Array nur ein Eintrag hat und das ist an Position 0. Position 1 (wie abgefragt) wäre dann nicht existent.hoerenraph schrieb:Das einzige was ich noch lesen kann bevor sich das skript schließt ist "list index out of range"
wie kann ich das fenster offen lassen?
Möglicherweise auch eine Leerzeile. Z.B. ne Leerzeile am Dateiende.
Ergänzung ()
Na z.B. vorher schon ein Cmdline-Fenster aufmachen und darin das Skript starten. Oder halt via Eigenschaften lässt sich bestimmt einstellen, dass Fenster nach dem beenden des Programms offen zu lassen.hoerenraph schrieb:wie kann ich das fenster offen lassen?
Zuletzt bearbeitet:
- Registriert
- Jan. 2017
- Beiträge
- 15
Ui ok
Also müsste man abfragen ob die Zeile einen Doppelpunkt hat und wenn nicht überspringen?
Würde sich das einfach umsetzen lassen?
Also müsste man abfragen ob die Zeile einen Doppelpunkt hat und wenn nicht überspringen?
Würde sich das einfach umsetzen lassen?
leuteechtjetzt
Newbie
- Registriert
- Jan. 2017
- Beiträge
- 6
Versuchs mal hiermit:
Code:
input_file = 'in.txt'
output_file = 'out.txt'
out_file = open(output_file, 'w+')
with open(input_file) as f:
for line in f:
try:
if ":" in line:
out_file.write(line.split(':')[1])
else:
print("line without \":\". Omitting line!")
except Exception as e:
print(e)
out_file.close()
- Registriert
- Jan. 2017
- Beiträge
- 15
jetzt bekomme ich
Code:
name 'lines' is not defined
leuteechtjetzt
Newbie
- Registriert
- Jan. 2017
- Beiträge
- 6
Sorry, ich hatte einen Tippfehler, den ich bereits ausgebessert habe. (in Zeile 9: Einfach lines zu line ändern!)
0x8100
Admiral
- Registriert
- Okt. 2015
- Beiträge
- 9.934
das wird eigentlich schon durch den try, except block abgefangen, die meldung wird ausgegeben, wenn was beim split/schreiben schief geht, aber er sollte weitermachen. mir machen die 4,x millionen zeilen irgendwie sorgen, nicht dass da eine 32bit limitierung ist. falls es das sein sollte gibts auch ne 64bit version. ich muss zugeben, mit solchen datenmengen habe ich noch nicht gearbeitet 

- Registriert
- Jan. 2017
- Beiträge
- 15
0x8100 schrieb:das wird eigentlich schon durch den try, except block abgefangen, die meldung wird ausgegeben, wenn was beim split/schreiben schief geht, aber er sollte weitermachen. mir machen die 4,x millionen zeilen irgendwie sorgen, nicht dass da eine 32bit limitierung ist.
Leider auch mit der Doppelpunkt Abfrage wieder die gleiche Meldung und die gleiche Größe

Ergänzung ()
Meine Lieben,
ich danke euch allen, für heute muss ich leider los aber ich werde mich morgen wieder melden.
Zuletzt bearbeitet:
leuteechtjetzt
Newbie
- Registriert
- Jan. 2017
- Beiträge
- 6
Wie 0x8100 schon gesagt hat, würde ich es auch mal mit der 64bit Python Distribution versuchten.
Möglicherweise läuft Python beim Einlesen der Datei über das Speicherlimit von 32bit. Das sollte eigentlich nicht sein, weil die Datei ja on-the-fly in die neue Datei geschrieben wird. Der "Fehler" könnte also beim Iterieren über f liegen. (for line in f).
Trotzdem ein bisschen komisch, weil Python ja mit Coroutines mit vielen Aufrufen auch keine Probleme hat.
Also wie gesagt, versuchs mal mit 64bit!
Möglicherweise läuft Python beim Einlesen der Datei über das Speicherlimit von 32bit. Das sollte eigentlich nicht sein, weil die Datei ja on-the-fly in die neue Datei geschrieben wird. Der "Fehler" könnte also beim Iterieren über f liegen. (for line in f).
Trotzdem ein bisschen komisch, weil Python ja mit Coroutines mit vielen Aufrufen auch keine Probleme hat.
Also wie gesagt, versuchs mal mit 64bit!
HominiLupus
Banned
- Registriert
- Okt. 2013
- Beiträge
- 33.550
starte cmd.exe damit es dauerhaft offenbleibt und starte das python script da drin. Dann solltest du einen Stacktrace von ein paar Zeilen bekommen den du hier posten kannst.
Piktogramm
Admiral
- Registriert
- Okt. 2008
- Beiträge
- 9.342
Ein Integerwert sollte eigentlich mindestens 2^31-1 Werte annehmen können, also bis 2,1 Milliarden laufen und damit bei einer Datei die nur aus "\n" besteht 2GB Daten durchgrasen bevor etwas passiert. Wobei ab Python3 keinerlei Limit mehr besteht, außer dass der Arbeitsspeicher die Zahl vorhalten können muss.
- Registriert
- Jan. 2017
- Beiträge
- 15
Habs heute doch noch mal probiert,
hier ist die rückmeldung:
Eine Versionsabfrage habe ich gemacht indem ich einfach mal py eingegeben habe:
Ich denke das ist dann die 64-bit version oder muss ich die explizit starten?
ausgeführt wurde das hier:
Bedeutet das, dass ich für python nicht lesbare Zeichen in meiner Datei habe?
Kann man das irgendwie abfragen und diese Zeichen überspringen?
hier ist die rückmeldung:
Code:
C:\Users\rapha\Desktop\DB>delete2.py
line without ":". Omitting line!
line without ":". Omitting line!
line without ":". Omitting line!
line without ":". Omitting line!
Traceback (most recent call last):
File "C:\Users\rapha\Desktop\DB\delete2.py", line 7, in <module>
for line in f:
File "C:\Users\rapha\AppData\Local\Programs\Python\Python36\lib\encodings\cp1252.py", line 23, in decode
return codecs.charmap_decode(input,self.errors,decoding_table)[0]
UnicodeDecodeError: 'charmap' codec can't decode byte 0x81 in position 6970: character
Eine Versionsabfrage habe ich gemacht indem ich einfach mal py eingegeben habe:
Code:
C:\Users\rapha\Desktop\DB>py
Python 3.6.0 (v3.6.0:41df79263a11, Dec 23 2016, 08:06:12) [MSC v.1900 64 bit (AMD64)] on win32
Type "help", "copyright", "credits" or "license" for more information.
>>>
Ich denke das ist dann die 64-bit version oder muss ich die explizit starten?
ausgeführt wurde das hier:
Code:
input_file = 'C:/Users/rapha/Desktop/DB/all.txt'
output_file = 'C:/Users/rapha/Desktop/DB/all2.txt'
out_file = open(output_file, 'w+')
with open(input_file) as f:
for line in f:
try:
if ":" in line:
out_file.write(line.split(':')[1])
else:
print("line without \":\". Omitting line!")
except Exception as e:
print(e)
out_file.close()
Bedeutet das, dass ich für python nicht lesbare Zeichen in meiner Datei habe?
Kann man das irgendwie abfragen und diese Zeichen überspringen?
Zuletzt bearbeitet:
andy_m4
Admiral
- Registriert
- Aug. 2015
- Beiträge
- 7.870
Ah. Ein Encoding-Fehler. Python geht von einer anderen Textkodierung aus, als die Datei wirklich ist.hoerenraph schrieb:Habs heute doch noch mal probiert,
hier ist die rückmeldung:
Weißt Du das zufällig?
UTF-8?
ISO-8859-15?
usw.
Ansonsten kann man natürlich auch noch Encoding-Fehler behandeln und notfalls dann eben einfach mit der nächsten Zeile weiter machen und Zeilennummer mit der problematische Zeile ausgeben, so dass Du sie "von Hand" migrieren kannst.
Aber da melden sich sicher gleich die Python-Profis. :-)
leuteechtjetzt
Newbie
- Registriert
- Jan. 2017
- Beiträge
- 6
Probier mal statt
Folgendes aus:
Das ist natürlich nur spekulativ. Falls Du die richtige Encodierung weißt, musst du die entsprechend anpassen.
Häufig ist aber "ISO-8859-1" verwendet worden, wenn es nicht UTF-8 ist. :-)
Ja, deine Pythonumgebung ist 64bit!
Code:
with open(input_file) as f:
Folgendes aus:
Code:
with open(input_file,encoding="ISO-8859-1") as f:
Das ist natürlich nur spekulativ. Falls Du die richtige Encodierung weißt, musst du die entsprechend anpassen.
Häufig ist aber "ISO-8859-1" verwendet worden, wenn es nicht UTF-8 ist. :-)
Ja, deine Pythonumgebung ist 64bit!
Zuletzt bearbeitet:
- Registriert
- Jan. 2017
- Beiträge
- 15
Danke 
Jetzt wirds aber nicht besser
Ich habe die Datei mit ultraedit geöffnet und nochmal als utf8 abgespeichert
Jetzt hat sich die Dateigröße grad mal verdoppelt

Jetzt wirds aber nicht besser

Ich habe die Datei mit ultraedit geöffnet und nochmal als utf8 abgespeichert
Jetzt hat sich die Dateigröße grad mal verdoppelt
andy_m4
Admiral
- Registriert
- Aug. 2015
- Beiträge
- 7.870
War auch keine gute Idee, weil Du jetzt evtl. noch mehr kaputt gemacht hast. Wichtig ist vor allem das Encoding der Quelldatei rauszubekommen. Wenn Ultraedit das zulässt, einfach mal die Dir Datei in gängigen Zeichensätzen anschauen. Wenn keine "komischen" Zeichen mehr auftreten und Umlaute etc. korrekt dargestellt werden, hast Du den richtigen Zeichensatz gefunden.hoerenraph schrieb:Danke
Jetzt wirds aber nicht besser
Ich habe die Datei mit ultraedit geöffnet und nochmal als utf8 abgespeichert
- Registriert
- Jan. 2017
- Beiträge
- 15
sieht so aus als wäre es 1252
also das ganz normale ascii?
wie sage ich python, dass es das benutzen soll?
also das ganz normale ascii?
wie sage ich python, dass es das benutzen soll?
Piktogramm
Admiral
- Registriert
- Okt. 2008
- Beiträge
- 9.342
Deine Fehlermeldung enthält, dass das Byte mit Wert 0x81 (also hexadezimal: 81, Dezimal 129) eben keine Entsprechung in ASCII hat. Weiteres zu ASCII bringt dir das www nach kurzer Suche.
Auch wie du Python dazu bringst datein als Latin, UTF8 etc. zu interpretieren bringt das Netz zu Tage. Nur eine kurze Suche entfernt.
Auch wie du Python dazu bringst datein als Latin, UTF8 etc. zu interpretieren bringt das Netz zu Tage. Nur eine kurze Suche entfernt.
- Registriert
- Jan. 2017
- Beiträge
- 15
Also nach rumprobieren welche codierung benutzt wird hat jetzt alles geklappt!
Vielen Vielen Dank euch allen!
Vielen Vielen Dank euch allen!
Ähnliche Themen
- Antworten
- 6
- Aufrufe
- 4.273
- Antworten
- 3
- Aufrufe
- 1.402
- Antworten
- 4
- Aufrufe
- 3.804
- Antworten
- 6
- Aufrufe
- 12.077