Seite 1 von 1

Ziffern in Zeile hinzufügen

Verfasst: Mittwoch 24. Juni 2015, 14:27
von Kahnbein.Kai
Hallo,
ich bräuchte mal die Hilfe des Forums. Ich habe leider gar keine Ahnung mehr von Phyton, vor 5 Jahren habe ich mich mit Phyton im Rahmen einer Informatikgrundvorlesung beschäftigt.

Zum Problem, ich habe eine Datei mit über 7 Millionen Zeilen, Hochwert,Rechtswert,Höhe alles im UTM Format. Beim Hochwert wurden die ersten beiden Ziffern die 3 und die 2 Weggeschnitten.
Ich kann die Datei nicht mit Excel bearbeiten. Als Beispiel:
375000.00,5709027.56,59.98
und so sollte es aussehen,
32375000.00,5709027.56,59.98


Gruß Kai

Re: Ziffern in Zeile hinzufügen

Verfasst: Mittwoch 24. Juni 2015, 14:37
von sparrow
Wie lautet denn deine konkrete Frage? Wie man eine Zeile so neu erstellt, dass da ein 32 vor steht?

Code: Alles auswählen

>>> zeile = "375000.00,5709027.56,59.98"
>>> neue_zeile = "32"+zeile
>>> print neue_zeile
32375000.00,5709027.56,59.98

Re: Ziffern in Zeile hinzufügen

Verfasst: Mittwoch 24. Juni 2015, 14:40
von BlackJack
@Kanhbein.Kai: Wenn Du es schon einmal konntest, dann solltest Du Dich doch eigentlich mit einem Tutorial wieder recht flott in Python einarbeiten können. In der Python-Dokumentation gibt es ein Tutorial.

Du kannst das rein mit Zeichenkettenoperationen lösen, oder das `csv`-Modul zu Hilfe nehmen. Wobei ich nicht so ganz verstehe wo die fehlenden Daten herkommen‽

Re: Ziffern in Zeile hinzufügen

Verfasst: Mittwoch 24. Juni 2015, 14:51
von Kahnbein.Kai
@sparrow,
Wie man das Programmieren würde. Ich habe keine Ahnung mehr.
Der Ablauf wäre wie folgt.
Datei auswählen; 1 Zeile auslesen; 32 hinzufügen; 1 Zeile speichern; 2 Zeile auslesen; 32 hinzufügen; 2 Zeile speichern; ... ; das über 7 Millionen mal.

@BlackJack
Das sind Hochwert, Rechtswert und Höhenangaben, ich würde damit ein Höhenmodell erstellen. Das Programm mit dem ich das Modell erstelle arbeitet mit den "vollen" Koordinaten z.B. 32375997.589, in der Datei sind die ersten beiden Ziffern weggelassen worden.

Re: Ziffern in Zeile hinzufügen

Verfasst: Mittwoch 24. Juni 2015, 16:37
von Sirius3
@Kahnbein.Kai: Dir sagt hoffentlich "for-Schleife" noch etwas, dann braucht man nicht 7 Millionen mal das selbe zu schreiben.

Re: Ziffern in Zeile hinzufügen

Verfasst: Mittwoch 24. Juni 2015, 17:36
von Kahnbein.Kai
Ja weiss ich noch.

Ich habe jetzt mal eine TEST.txt erstellt.

Das habe ich bis jetzt

datei=open("TEST.txt,"r")
for zeile in datei:
print(32+zeile)
datei.close()

Aber es geht nicht.

Re: Ziffern in Zeile hinzufügen

Verfasst: Mittwoch 24. Juni 2015, 17:57
von Sirius3
@Kahnbein.Kai: und was geht nicht? Gibt es eine Fehlermeldung? Wenn ja, welche?

Re: Ziffern in Zeile hinzufügen

Verfasst: Mittwoch 24. Juni 2015, 19:24
von Kahnbein.Kai
@Sirius3

Tut mir leid, ich bin gerade auf 180, da es einfach nicht klappt.
Ich habe die *.py Datei in dem Ordner mit der Test.txt gespeichert. Leider geht das Dos-Fenster direkt wieder zu.
In der Vorlesung meine ich haben wir gelernt das eine Input() am Ende, das automatische Schließen verhindert.
Angehängt ist ein Screenshot des Fensters.Bild

Der Quellcode natürlich noch,

Code: Alles auswählen

datei=open("test.txt","r")
for zeile in datei:
	print(32+zeile)
datei.close()
input()

Re: Ziffern in Zeile hinzufügen

Verfasst: Mittwoch 24. Juni 2015, 19:27
von darktrym
Erstens fehlt ein doppeltes Hochkomma und zweitens benutze entweder eine IDE deren Ausgaben in einem Fenster landen oder ruf gleich die Programme von der Kommandozeile auf.

PS: Wir haben auch ein Python Tag, der dient nicht nur zur Deko.

Re: Ziffern in Zeile hinzufügen

Verfasst: Mittwoch 24. Juni 2015, 19:30
von Kahnbein.Kai
Danke, ist geändert.

Re: Ziffern in Zeile hinzufügen

Verfasst: Mittwoch 24. Juni 2015, 19:48
von Kahnbein.Kai
Es klappt !

Code: Alles auswählen

datei=open("test.txt","r")
for zeile in datei:
        print("32"+zeile)
datei.close()
input()
Tut mir leid, ich bin echt eingerostet ! Ich habe die " vergessen bei 32.
Jetzt ist das Problem, das das Dos-Fenster offen bleibt aber in der test.txt werden die Zeilen nicht geändert :(
Das hängt wohl mit dem "r" zusammen oder? Aber erst muss Phyton die Datei lesen, oder ist beiden möglich, z.B. "rw".

Gruß Kai

Re: Ziffern in Zeile hinzufügen

Verfasst: Mittwoch 24. Juni 2015, 19:54
von Sirius3
@Kahnbein.Kai: Du brauchst zwei verschiedene Dateien, eine zum Lesen und eine zum Schreiben.

Re: Ziffern in Zeile hinzufügen

Verfasst: Mittwoch 24. Juni 2015, 20:01
von cofi

Code: Alles auswählen

import os
with open("test.txt", "r") as in_, open("test.new", "w") as out:
    for line in in_:
        out.write("32" + line)

os.rename("test.new", "test.txt")
Fehlt natuerlich noch eine Fehlerbehandlung.

Re: Ziffern in Zeile hinzufügen

Verfasst: Mittwoch 24. Juni 2015, 20:03
von Kahnbein.Kai
@sirius3
Danke für deine Geduld.

Code: Alles auswählen

datei=open("test.txt","r")
for zeile in datei:
        print("32"+zeile)
dateia=open("test-bearbeitet.txt","w")
        print(zeile)
datei.close()
input()
Es wir eine Datei test-bearbeitet.txt erstellt, die aber leer ist. Folgende Fehlermeldung wird ausgegeben "unexpected ident"

Re: Ziffern in Zeile hinzufügen

Verfasst: Mittwoch 24. Juni 2015, 20:10
von Sirius3
@Kahnbein.Kai: Zeile 4 beendet den for-Schleifen-Block, weil sie auf der gleichen Ebene wie das for eingerückt ist. Die Zeile danach ist eingerückt, obwohl kein neuer Block anfängt. Daher der Fehler.

Re: Ziffern in Zeile hinzufügen

Verfasst: Mittwoch 24. Juni 2015, 20:11
von Kahnbein.Kai
@ cofi,
ja es klappt.
Ich habe ein paar Fragen dazu

Code: Alles auswählen

    import os # was ist import os ? 
    with open("test.txt", "r") as in_, open("test.new", "w") as out:
        for line in in_:
            out.write("32" + line)
     
    os.rename("test.new", "test.txt")
Ist meins komplett falsch, oder geht es so auch ?

Gruß Kai

Re: Ziffern in Zeile hinzufügen

Verfasst: Mittwoch 24. Juni 2015, 20:28
von Kahnbein.Kai
Ich bekomme es selber einfach nicht hin.

Code: Alles auswählen

datei=open("test.txt","r")
for zeile in datei:
        print("32"+zeile)
        dateia=open("test-bearbeitet.txt","w")
        dateia.write(zeile)
datei.close()
dateia.close()
input()
test.txt beinhaltet zum Testen folgende Werte

30000
30003
30000
00000
03000
03003

diese werden im DOS Fenster auch in

3230000
3230003
3230000
3200000
3203000
3203003

umgewandelt. In die Datei test-bearbeitet.ext schreibt Python aber nur

03003

Re: Ziffern in Zeile hinzufügen

Verfasst: Mittwoch 24. Juni 2015, 20:53
von cofi
Schau mal wie oft "test-bearbeitet.txt" geoeffnet wird.

`os` ist ein Modul der Standardbibliothek; Python hat eine Dokumentation: https://docs.python.org/2/library/os.html
Du kannst es natuerlich auch ohne `with` machen, aber so wird garantiert, dass die Dateien auch wieder geschlossen werden.

Und: Lass das `input()` am Ende weg und starte es aus der Konsole. Sonst wirst du im Fehlerfall keine Meldung sehen.

Re: Ziffern in Zeile hinzufügen

Verfasst: Mittwoch 24. Juni 2015, 21:01
von Kahnbein.Kai
ah ok,
Ich glaube ich habe es auch nach vielem rumprobieren.

Code: Alles auswählen

datei=open("test.txt","r")
dateia=open("test-bearbeitet.txt","w")
for zeile in datei:
       print("32"+zeile)
       dateia.write("32"+zeile)
datei.close()
dateia.close()
Jetzt werden beide Dateien richtig ausgegeben.
Ist das von Ihnen "besser" Programmiert, muss bei meiner Lösung zwei mal die 32 hinzugefügt werden ?
In der Vorlesung ist hinter beim

Code: Alles auswählen

dateia.write("32"+zeile,file=datei)
angehängt, leider ist keine Erklärung dabei was das file= bringt.

Danke für eure Hilfe ! Ich werde mich bestimmt nochmal melden :)

Schönen Abend noch !

Re: Ziffern in Zeile hinzufügen

Verfasst: Mittwoch 24. Juni 2015, 21:19
von cofi
In der Vorlesung steht bestimmt nicht `dateia.write(..., file=datei)`, sondern viel eher `print(..., file=datei)` und macht damit (fast) das gleiche wie dein `file.write` Aufruf. Dokumentation dazu: https://docs.python.org/3/library/functions.html#print