erste Spalte manipulieren

Installation und Anwendung von Datenbankschnittstellen wie SQLite, PostgreSQL, MariaDB/MySQL, der DB-API 2.0 und sonstigen Datenbanksystemen.
Antworten
obychef
User
Beiträge: 2
Registriert: Montag 28. Januar 2013, 19:03

Hallo,
ich programmiere seit kurzem in Python und bin begeistert,
wieß nicht ob ich hier richtig bin:
Ich will aus einer Datei bestehend aus Tabelle,
die erste Zahl in jeder Spalte -5 rechnen.
Mein Versuch:

Code: Alles auswählen

#! /usr/bin/env python

f = open('../Tabelle.csv','r')
g = open('Neue Daten.txt','a')
import re
linecount = 0
for line in f:
	linecount = linecount + 1
	if linecount == 1:
		g.write(line)
	
	g.write(re.sub(r"(^.* )",str(float(\g<1>)-5),line))
f.close
g.close
Dies liefert Fehler. Warum?
Danke schonmal!
Zuletzt geändert von Anonymous am Montag 28. Januar 2013, 19:13, insgesamt 1-mal geändert.
Grund: Quelltext in Python-Code-Tags gesetzt.
BlackJack

@obychef: Weil das keine gültige Python-Syntax ist.

Davon abgesehen ist in der ersten Zeile ein Leerzeichen zwischen '!' und '/' zu viel.

Importe werden üblicherweise oben im Modul durchgeführt, damit man sieht wovon ein Modul abhängt und bei längeren Modulen nicht unnötig Module mehrfach importiert weil man nicht gesehen hat, dass man das an anderer Stelle schon einmal gemacht hat.

`f` und `g` sind als Namen zu kurz und nichtssagend.

Statt `linecount` manuell zu verwalten könnte man die `enumerate()`-Funktion verwenden. Oder vor der Schleife einfach die erste Zeile lesen und unverändert in die Zieldatei schreiben.

Einrücktiefe ist per Konvention vier Leerzeichen; keine Tabs.

Statt dort mit regulären Ausdrücken heran zu gehen, bietet sich bei CSV-Dateien das `csv`-Modul aus der Standardbibliothek an.

Die Dateien sollte man auch wieder schliessen. Eine Methode einfach nur vom Objekt abzufragen bringt nichts — man muss sie auch *aufrufen*. Allerdings sollte man Dateien wenn möglich mit der ``with``-Anweisung benutzen. Dann braucht man keinen `close()`-Aufruf.
obychef
User
Beiträge: 2
Registriert: Montag 28. Januar 2013, 19:03

Vielen Dank für die schnelle und hilfreiche Antwort, ich das mit dem Csv-Modul gleich morgen ausprobieren, bin vorher noch nicht drauf gestoßen, aber es scheint das passende Paket zu sein ;)
Antworten