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

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
pytor
User
Beiträge: 4
Registriert: Donnerstag 21. Juli 2011, 12:59

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
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)

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.
sma
User
Beiträge: 3018
Registriert: Montag 19. November 2007, 19:57
Wohnort: Kiel

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.
Zuletzt geändert von sma am Donnerstag 21. Juli 2011, 19:22, insgesamt 1-mal geändert.
Benutzeravatar
cofi
Python-Forum Veteran
Beiträge: 4432
Registriert: Sonntag 30. März 2008, 04:16
Wohnort: RGFybXN0YWR0

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'.
pytor
User
Beiträge: 4
Registriert: Donnerstag 21. Juli 2011, 12:59

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.
Benutzeravatar
Hyperion
Moderator
Beiträge: 7478
Registriert: Freitag 4. August 2006, 14:56
Wohnort: Hamburg
Kontaktdaten:

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:
encoding_kapiert = all(verstehen(lesen(info)) for info in (Leonidas Folien, Blog, Folien & Text inkl. Python3, utf-8 everywhere))
assert encoding_kapiert
Antworten