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
Ziffern in Zeile hinzufügen
-
Kahnbein.Kai
- User
- Beiträge: 104
- Registriert: Mittwoch 24. Juni 2015, 14:12
- Wohnort: Bochum
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-
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‽
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‽
-
Kahnbein.Kai
- User
- Beiträge: 104
- Registriert: Mittwoch 24. Juni 2015, 14:12
- Wohnort: Bochum
@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.
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.
-
Kahnbein.Kai
- User
- Beiträge: 104
- Registriert: Mittwoch 24. Juni 2015, 14:12
- Wohnort: Bochum
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.
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.
-
Kahnbein.Kai
- User
- Beiträge: 104
- Registriert: Mittwoch 24. Juni 2015, 14:12
- Wohnort: Bochum
@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.
Der Quellcode natürlich noch,
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.

Der Quellcode natürlich noch,
Code: Alles auswählen
datei=open("test.txt","r")
for zeile in datei:
print(32+zeile)
datei.close()
input()
Zuletzt geändert von Kahnbein.Kai am Mittwoch 24. Juni 2015, 19:30, insgesamt 2-mal geändert.
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.
PS: Wir haben auch ein Python Tag, der dient nicht nur zur Deko.
-
Kahnbein.Kai
- User
- Beiträge: 104
- Registriert: Mittwoch 24. Juni 2015, 14:12
- Wohnort: Bochum
Danke, ist geändert.
-
Kahnbein.Kai
- User
- Beiträge: 104
- Registriert: Mittwoch 24. Juni 2015, 14:12
- Wohnort: Bochum
Es klappt !
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
Code: Alles auswählen
datei=open("test.txt","r")
for zeile in datei:
print("32"+zeile)
datei.close()
input()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
- cofi
- Python-Forum Veteran
- Beiträge: 4432
- Registriert: Sonntag 30. März 2008, 04:16
- Wohnort: RGFybXN0YWR0
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")Michael Markert ❖ PEP 8 Übersetzung ❖ Tutorial Übersetzung (3.x) ⇒ Online-Version (Python 3.3) ❖ Deutscher Python-Insider ❖ Projekte
-
Kahnbein.Kai
- User
- Beiträge: 104
- Registriert: Mittwoch 24. Juni 2015, 14:12
- Wohnort: Bochum
@sirius3
Danke für deine Geduld.
Es wir eine Datei test-bearbeitet.txt erstellt, die aber leer ist. Folgende Fehlermeldung wird ausgegeben "unexpected ident"
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()-
Kahnbein.Kai
- User
- Beiträge: 104
- Registriert: Mittwoch 24. Juni 2015, 14:12
- Wohnort: Bochum
@ cofi,
ja es klappt.
Ich habe ein paar Fragen dazu
Ist meins komplett falsch, oder geht es so auch ?
Gruß Kai
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")Gruß Kai
-
Kahnbein.Kai
- User
- Beiträge: 104
- Registriert: Mittwoch 24. Juni 2015, 14:12
- Wohnort: Bochum
Ich bekomme es selber einfach nicht hin.
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
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()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
- cofi
- Python-Forum Veteran
- Beiträge: 4432
- Registriert: Sonntag 30. März 2008, 04:16
- Wohnort: RGFybXN0YWR0
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.
`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.
Michael Markert ❖ PEP 8 Übersetzung ❖ Tutorial Übersetzung (3.x) ⇒ Online-Version (Python 3.3) ❖ Deutscher Python-Insider ❖ Projekte
-
Kahnbein.Kai
- User
- Beiträge: 104
- Registriert: Mittwoch 24. Juni 2015, 14:12
- Wohnort: Bochum
ah ok,
Ich glaube ich habe es auch nach vielem rumprobieren.
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 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 !
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()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)Danke für eure Hilfe ! Ich werde mich bestimmt nochmal melden
Schönen Abend noch !
- cofi
- Python-Forum Veteran
- Beiträge: 4432
- Registriert: Sonntag 30. März 2008, 04:16
- Wohnort: RGFybXN0YWR0
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
Michael Markert ❖ PEP 8 Übersetzung ❖ Tutorial Übersetzung (3.x) ⇒ Online-Version (Python 3.3) ❖ Deutscher Python-Insider ❖ Projekte
