Änfanger Frage: zu csv und string

Wenn du dir nicht sicher bist, in welchem der anderen Foren du die Frage stellen sollst, dann bist du hier im Forum für allgemeine Fragen sicher richtig.
Antworten
PenPen

Dienstag 19. August 2003, 08:52

Hallo ich habe folgendes Problem:
Ich habe eine .csv Datei, die ich so verändern möchte das ";" zu " " und " " zu "_" werden.
Über Lösungen bzw Lösungsversuche würde ich mich freuen.
Voges
User
Beiträge: 564
Registriert: Dienstag 6. August 2002, 14:52
Wohnort: Region Hannover

Dienstag 19. August 2003, 09:12

Hallo!
Am Einfachsten gehts wohl mit der string-Methode translate(). Da muss man sich zumindest keinen Kopf machen, in welcher Reihenfolge man die Ersetzungen durchführt.

Code: Alles auswählen

>>> import string
>>> transtable = string.maketrans('; ',' _')
>>> "2345;ASDF;Dies ist ein Satz;234".translate(transtable)
'2345 ASDF Dies_ist_ein_Satz 234'
>>>
Jan
Voges
User
Beiträge: 564
Registriert: Dienstag 6. August 2002, 14:52
Wohnort: Region Hannover

Mittwoch 20. August 2003, 08:21

PenPen hat geschrieben:geht net.
Python ist installiert? Hat der Rechner Strom?
Sorry, aber "geht net" ist auch für einen Anfänger arg dürftig. Ein paar mehr Infos (Fehlermeldungen, Fehlverhalten) wären schon nötig.
Jan
Gast

Mittwoch 20. August 2003, 09:45

Oki stimmt ich hab da so einiges versäumt anzuführen, sorry
Der Rechner hat Strom und Python 2.2.3 ist installiert


Fehlermeldung:
Traceback (most recent call last):
File "./testOne.pyt", line 14, in ?
x.translate(transtable)
AttributeError: 'file' object has no attribute 'translate'

Die Datei habe ich sowohl mit w, a und r geöffnet.

Hoffe das sind genug informationen
Voges
User
Beiträge: 564
Registriert: Dienstag 6. August 2002, 14:52
Wohnort: Region Hannover

Mittwoch 20. August 2003, 10:57

Hallo!
Anonymous hat geschrieben:AttributeError: 'file' object has no attribute 'translate'
translate() arbeitet nur auf Strings, nicht auf Dateien direkt. Du musst also den Dateiinhalt in eine string-Variable einlesen und verändert dann zurückschreiben.

Code: Alles auswählen

import string
transtable = string.maketrans('; ',' _') 
f = open('bla.csv','r')
text = f.read()
f.close()
text = text.translate(transtable) 
f = open('bla.csv','w')
f.write(text)
f.close()
(nicht getestet)

Noch eine Anmerkung:
123;ABC;"Ein Satz ; mit Semikolon";234
Das Semikolon im Satz ist nach üblicher csv-Definition kein Value-Trenner und müsste also erhalten bleiben. Das klappt mit obiger Lösung leider nicht. Wenn in Deinen csv-Datei sowas also vorkommen kann, musst Du auf Python Version 2.3 updaten, denn dort gibt es ein csv-Modul, oder ein externes Modul installieren, z.B. http://www.colorstudy.com/software/webware/CSVParse.py .

Jan
PenPen

Mittwoch 20. August 2003, 13:39

Danke jetzt hat es erstmal geklappt
:D
Milan
User
Beiträge: 1078
Registriert: Mittwoch 16. Oktober 2002, 20:52

Mittwoch 20. August 2003, 18:53

In Python 2.3 gibts auch schon ein eingebautes Modul csv, dass das selbe leistet... ;)
Voges
User
Beiträge: 564
Registriert: Dienstag 6. August 2002, 14:52
Wohnort: Region Hannover

Mittwoch 20. August 2003, 19:16

Milan hat geschrieben:In Python 2.3 gibts auch schon ein eingebautes Modul csv, dass das selbe leistet... ;)
Schrub ich bereits :wink: :wink:
Jan
Milan
User
Beiträge: 1078
Registriert: Mittwoch 16. Oktober 2002, 20:52

Mittwoch 20. August 2003, 19:28

hups... hab deinen langen Beitrag nur schnell überflogen gehabt und den Link gesehen... :oops: :roll:
Antworten