Problem mit *.txt datei

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
Wunder
User
Beiträge: 2
Registriert: Dienstag 2. Dezember 2008, 16:23

Hallo 1.mal :)

Ich habe ein kleines Problem:
Ich möchte ein Programm schreiben das Wörter generiert, leider ist in einer *.txt die ich dazu lade hinter jdem wort ein "/n" so kann man z.B. nicht
"HansPeter" schreiben daraus wird->
Hans
Peter
Hier der code bisher

Über rege hilfe freue ich mich :arrow: :idea:

Code: Alles auswählen

import random
print ""
print "----------------"
print "Namengenerator"
print "----------------"
print ""
a = input("? ")
b = open ("namen.txt", "r")
c = open ("danach.txt", "w")
d = 1
while a >= d:
  
NEIN :-)
Benutzeravatar
cofi
Python-Forum Veteran
Beiträge: 4432
Registriert: Sonntag 30. März 2008, 04:16
Wohnort: RGFybXN0YWR0

Du meinst wohl `\n' ?

Benutze statt input lieber int(raw_input(..)).

Lass die Leerzeichen vor den Klammern weg.

Schreib was du genau machen willst - und zwar in einem verständlichen Deutsch -, denn aus dem Code erkennt man das nicht.

Dein Code sieht nämlich eher danach aus als wördest du zufällig Namen aus einer Datei in die andere schieben.

Und hilfreich wäre ausserdem zu erfahren, was denn überhaupt das Problem ist oO
Wunder
User
Beiträge: 2
Registriert: Dienstag 2. Dezember 2008, 16:23

So danke für die antworten (ging ja schnell) :D

So da du fragtest was das programm macht:
Es liest (sollte) eine Datei aus und speichert das ausgelesene mit einem anhang in der anderen *.txt Datei.
Das Problem besteht darin das immer (nach jedem Wort) eine neue Zeile angefangen wird.

(Meine Rechtschreibung ist nicht prickelnd ich weiß)

mfg
NEIN :-)
Benutzeravatar
cofi
Python-Forum Veteran
Beiträge: 4432
Registriert: Sonntag 30. März 2008, 04:16
Wohnort: RGFybXN0YWR0

Hmm nunja .. dein Code macht das nicht so ganz ;)

Code: Alles auswählen

 name = name.strip("\n")
targetfile.write(name)
Woebi du dann an einander klebende Namen hast, also vielleicht besser

Code: Alles auswählen

name = name.replace("\n", " ")
targetfile.write(name)
Unter Windows-Systemen evtl `\r\n' statt `\n'
derdon
User
Beiträge: 1316
Registriert: Freitag 24. Oktober 2008, 14:32

Denk dir mal bessere Namen für Varaiblen aus. Generell ist PEP8 eine schöne Sache. Wenn du noch Anfänger bist, hilft es auf einen Schmierzettel in Stichworten aufzuschreiben, was das Programm machen soll und in welcher Reihenfolge das passieren soll.
  • Datei lesen
  • Inhalt der Datei in Variable `file_before` speichern
  • Inhalt der Variable `file_before` ausgeben
  • Datei schließen
  • mit raw_input() Benutzereingabe entgegennehmen und in Variable `to_file` speichern
  • `to_file` in Datei schreiben (modus "a")
  • Datei schließen
Das [wiki=Tutorial/with]with-statement[/wiki] ist sehr nützlich, wenn man mit Dateien arbeitet. Wenn ich dich falsch versanden hab, einfach Bescheid sagen :wink:

@cofi: es gibt os.linesep
Y0Gi
User
Beiträge: 1454
Registriert: Freitag 22. September 2006, 23:05
Wohnort: ja

derdon hat geschrieben:@cofi: es gibt os.linesep
Und was soll das bringen, wenn man nicht weiß, woher die Datei kommt oder ein "unpassendes" Betriebssystem benutzt?

Wenn's robust sein soll, mit `line.strip()` allen Whitespace wegwerfen und gut. Die Daten dürften anschließend in einer Liste landen, daher ist das mit dem `.replace()` keine so passende Idee; für die *spätere* Darstellung dürfen dann gerne der `%`-Operator und/oder `.join()` verwendet werden.
sma
User
Beiträge: 3018
Registriert: Montag 19. November 2007, 19:57
Wohnort: Kiel

`readlines()` oder `readlines(False)` liest eine Textdatei zeilenweise und entfernt die Zeilenendzeichen. `readlines(True)` lässt sie stehen. Die erste Variante ist, was man haben will. `readlines` ist eine Methode von `file`, dem Objekt, was `open()` zurückliefert.

Stefan
Antworten