Seite 1 von 1

In Datei zu EOF gehen und das letzte Zeichen \n entfernen

Verfasst: Donnerstag 21. Juli 2011, 15:06
von pytor
Hallo,
ich bin neu hier im Forum, und relativ neu in python, kann aber C.

Problembeschreibung:
Ich versuche ein script zu schreiben, das eine Datei (.csv ) öffnet, die Zeilen der Datei einer
Liste übergibt, die Anzahl der Zeilen ist immer unterschiedlich.
Es soll das "\n" newline der letzten Zeile entfernt werden.
Dann wird die liste in eine neue Datei geschrieben.

Ich habe einige Lösungsansätze verfolgt, doch bekomme ich Fehlermeldungen, da wohl meine
gewünschten operationen nicht zum datentyp passen.

Ich poste mal meine Ansätze

Code: Alles auswählen

# ============================
def fileprocess():
    csvfi = open(icsvdatei, "r")   
    csvfo = open(ocsvdatei, "w")
    
    cnt = 0
    for line in csvfi:
        cnt += 1
        liste = line
	csvfo.writelines(liste)
	
    liste = line.rstrip("\n")  
    csvfo.writelines(liste[-1])
	
# ========== #  error's ============
    liste.pop(2)                  
    liste[:-1]					  
    liste[-1].rstrip("\n")
    liste = del liste[-2]
    liste = line.replace(line,line.rstrip("\n"))           
    csvfo.writelines(liste)
    csvfo.writelines(liste..range(0, cnt))
    csvfo.remove(line)
Vielleicht hat jemand einen Tip, eigentlich will ich in einer Datei zu EOF gehen und das
letzte Zeichen \n entfernen!

Danke im vorraus für die Hilfe
gruß pytor

Re: In Datei zu EOF gehen und das letzte Zeichen \n entferne

Verfasst: Donnerstag 21. Juli 2011, 15:10
von deets

Code: Alles auswählen


with open(datei) as inf:
       content = inf.read()
content = content.rstrip()
with open(datei, "w") as outf:
       outf.write(content)


Re: In Datei zu EOF gehen und das letzte Zeichen \n entferne

Verfasst: Donnerstag 21. Juli 2011, 15:35
von BlackJack
@pytor: Du hast in Deinem Code nirgends eine Liste. Wenn man eine Zeichenkette an den Namen `liste` bindet, bleibt das ja trotzdem eine Zeichenkette. Man muss in Python zwar keine Typen deklarieren, aber trotzdem hat jedes Objekt einen Typ. Und da ist Python auch pingeliger als C wo der Compiler je nach Einstellungen für einige Operationen nur Warnungen beim Übersetzen ausgibt, den Programmierer aber trotzdem alles Mögliche machen lässt. Insbesondere wenn der ”casted” und so letztendlich jeden Datentyp als jeden anderen durchgehen lassen kann — ob das nun sinnvoll ist und funktioniert, oder nicht.

Wenn Du Dir nicht sicher bist welchen Typ ein Objekt hat, kannst Du ihn mit der `type()`-Funktion ermitteln und zum Beispiel ausgeben lassen.

Re: In Datei zu EOF gehen und das letzte Zeichen \n entferne

Verfasst: Donnerstag 21. Juli 2011, 18:55
von sma
Einfach alles einlesen, strippen und wieder speichern geht natürlich, finde ich aber irgendwie unschön, da man Speicherplatz verbraucht, den man eigentlich nicht verbrauchen müsste.

In einer geöffneten Datei kann man mit `seek()` ans Ende springen, dann einen zurück gehen und mit `truncate()` dort schneiden:

Code: Alles auswählen

with open(name, "r+b") as f:
    f.seek(-1, 2)
    f.truncate()
Stefan

PS: Könnte sein, dass das unter Windows nicht geht.

PPS: Statt blind abzuschneiden, will man vielleicht erst mal gucken, was da wohl für ein Zeichen steht.

Re: In Datei zu EOF gehen und das letzte Zeichen \n entferne

Verfasst: Donnerstag 21. Juli 2011, 19:03
von cofi
sma hat geschrieben:PS: Könnte sein, dass das unter Windows nicht geht.
Oder sonstige Systeme, fuer `truncate` muss die Datei zum Schreiben geoeffnet sein. Also z.B. 'r+b' oder 'ab'.

Re: In Datei zu EOF gehen und das letzte Zeichen \n entferne

Verfasst: Freitag 22. Juli 2011, 14:08
von pytor
Hallo,

ich bedanke mich für die schnelle und ergebnisorientierte Hilfe.
Und muss zugeben, das ich irgendwie davon aus ging mit einer Liste zuarbeiten und deren Indexzierung und
Zugriff auf die Elemente muss ich mir wohl nochmal anschauen.

Obwohl ich einiges an Literatur überflogen habe war mir die "with .. as .." Struktur nicht bekannt.

Also vielen Dank, es wird nicht meine letzte frage gewesen sein.


Frage: Welches Python Buch würdet Ihr empfehlen? habe das "Ernesti, Kaiser" finde es nicht so gut.

Re: In Datei zu EOF gehen und das letzte Zeichen \n entferne

Verfasst: Samstag 23. Juli 2011, 15:22
von Hyperion
pytor hat geschrieben: Frage: Welches Python Buch würdet Ihr empfehlen? habe das "Ernesti, Kaiser" finde es nicht so gut.
Von diesem Buch wird hier auch immer abgeraten. Gründe dazu finden sich in div. Threads. Benutze mal die SuFu wegen guten Büchern und / oder nutze das wiki (wiki.python-forum.de)

@Damaskus: Push :mrgreen: