Dateiendung an file anhängen

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
Benutzeravatar
Ede1994
User
Beiträge: 72
Registriert: Dienstag 2. Mai 2017, 12:41

Hallo.
Ich habe folgendes Problem...
Ich habe eine txt-Datei mit vielen Einträgen in der Form:
111
222
333
.
.
.
n
Nun möchte ich an jede Datei aus dieser Liste eine Endung anhängen. Dafür habe ich folgenden Code geschrieben:

Code: Alles auswählen

fobj_in = open("ahi_g20.txt")
fobj_out = open("ahi_g20_2.txt","w")

b = '.eeg'

for line in fobj_in:
    print line.rstrip()
    fobj_out.write(line + b)
  
    
fobj_in.close()
fobj_out.close()
Diese Ausgabe sieht dann wie folgt aus:
111
eeg.222
eeg.333
.
.
.
n
.eeg

Das '.eeg' wird also immer erst nach dem Zeilenumbruch eingefügt. Warum? Kann mir bitte jemand helfen?
Zuletzt geändert von Anonymous am Montag 17. Juli 2017, 10:16, insgesamt 1-mal geändert.
Grund: Quelltext in Python-Codebox-Tags gesetzt.
Sirius3
User
Beiträge: 17746
Registriert: Sonntag 21. Oktober 2012, 17:20

@Ede1994: jede Zeile enthält ein Zeile-Ende-Zeichen. Du hängst nach dem Zeileendezeichen noch etwas an, was dann natürlich erst in der nächsten Zeile auftaucht. In Deiner print-Zeile entfernst Du ja schon das Zeile-Ende-Zeichen, Dir ist also bewußt, dass es das gibt.
Benutzeravatar
Ede1994
User
Beiträge: 72
Registriert: Dienstag 2. Mai 2017, 12:41

Ja das war mir bewusst. Mir ist bzw. war klar warum die Endung verschoben ist, aber ich habe jetzt ein bisschen probiert und konnte den Zeilenumsprung nicht vermeiden. Mir fehlt der richtige Befehl oder vllt auch der richtige Gedanke...
BlackJack

@Ede1994: Du hattest doch schon den richtigen Gedanken: Den Zeilenumbruch entfernen. Nur halt nicht nur bei der Ausgabe sondern auch bevor Du die Dateiendung anhängst.
Benutzeravatar
Ede1994
User
Beiträge: 72
Registriert: Dienstag 2. Mai 2017, 12:41

Ja, hatte ich so probiert:
[codebox=python file=Unbenannt.txt]
fobj_in = open("ahi_g20.txt")
fobj_out = open("ahi_g20_2.txt","w")

b = '.eeg'

for line in fobj_in:
line.replace('\n', '')
fobj_out.write(line + b)


fobj_in.close()
fobj_out.close()
[/code]

Ging aber nicht! :?:
__deets__
User
Beiträge: 14533
Registriert: Mittwoch 14. Oktober 2015, 14:29

Lies dir mal die Dokumentation der von dir verwendeten Methode "replace" durch, und es wird dir ein :idea: aufgehen.
Benutzeravatar
Ede1994
User
Beiträge: 72
Registriert: Dienstag 2. Mai 2017, 12:41

Okay. Also ich denke replace habe ich verstanden, habe mal das probiert:
[codebox=python file=Unbenannt.txt]
fobj_in = open("ahi_g20.txt")
fobj_out = open("ahi_g20_2.txt","w")


for line in fobj_in:
fobj_out.write(line.replace('\n', '.eeg'))


fobj_in.close()
fobj_out.close()
[/code]
Das Ergebnis bleibt jedoch das gleiche.
Benutzeravatar
Ede1994
User
Beiträge: 72
Registriert: Dienstag 2. Mai 2017, 12:41

Okay. ich hab es jetzt...eine kleiner dummer Fehler :D
Lösung:
[codebox=python file=Unbenannt.txt]
fobj_in = open("ahi_g20.txt").readlines()
fobj_out = open("ahi_g20_2.txt","w")

print fobj_in

for line in fobj_in:
fobj_out.write(line.replace('\r', '.eeg'))


#fobj_in.close()
fobj_out.close()
[/code]

DANKE für eure Hilfe!!!!!
Sirius3
User
Beiträge: 17746
Registriert: Sonntag 21. Oktober 2012, 17:20

@Ede1994: nein! Das ist keine Lösung. Eigentlich dürfte ein \r in den Zeilen gar nicht auftauchen, außer Du versuchst eine unter Windows geschriebene Datei mit Linux zu verarbeiten. replace macht prinzipiell etwas anderes als das was Du willst. Der Name fobj_in ist zudem verwirrend und falsch.

Code: Alles auswählen

suffix = ".egg"
with open("ahi_g20.txt") as fobj_in:
    with open("ahi_g20_2.txt","w") as fobj_out:
    for line in fobj_in:
        line = line.rstrip()
        fobj_out.write("{}{}\n".format(line, suffix))
Antworten