Seite 1 von 1

Datei einlesen und in andere Datei schreiben

Verfasst: Freitag 7. April 2006, 16:14
von DaVerve
Hallo, ich hätte eine frage ich will aus einer vorgegebenen datei die zeilen einlesen und dann sortiert in eine andere schreiben.

Code: Alles auswählen

file = open('text.txt', 'r')
while 1:

    line = file.readlines(10)
    
    if not line:
        break    

    #print line
    
file.close()

line.sort()

file = open('ausgabe.txt', 'w')
while 1:
    file.writelines(line)

    if not line:
        break
        
        #print line
file.close()
Er nimmt bei mir hier jetzt die Datei holt die sachen aus der text.txt und erstellt und sortiert auch die liste nur schreibt sie nicht in die ausgabe.txt.
Ich weiß da nicht weiter, kann mir da jemand helfen.

Danke
DaVerve

Re: Datei einlesen und in andere Datei schreiben

Verfasst: Freitag 7. April 2006, 16:35
von gerold
DaVerve hat geschrieben:Hallo, ich hätte eine frage ich will aus einer vorgegebenen datei die zeilen einlesen und dann sortiert in eine andere schreiben.
Hi DaVerve!

bis Python 2.3.x:

Code: Alles auswählen

src = file("quelle.txt", "rU")
dest = file("ziel.txt", "w")
lines = src.readlines()
lines.sort()
dest.writelines(lines)
dest.close()
src.close()
ab Python 2.4.x:

Code: Alles auswählen

src = file("quelle.txt", "rU")
dest = file("ziel.txt", "w")
dest.writelines(sorted(src.readlines()))
dest.close()
src.close()
mfg
Gerold
:-)

Verfasst: Sonntag 9. April 2006, 15:31
von DaVerve
vielen dank

Verfasst: Dienstag 25. April 2006, 16:49
von DaVerve
ich hätte da jetzt noch eine frage, ich möchte das das einlesen in einer funktion geschieht und dann in der main funktion das eingelesene auf der konsole ausgegeben wird. Wie bekomme ich das hin.Ich hab noch wenig ahnung von Funktionen also nicht zu verwührt sein über meinen code.
Das habe ich bis jetzt aber da tut sich nicht viel:

Code: Alles auswählen

def einlesen(lines):
    src = file("text.txt", "rU")
    lines = src.readlines()
    src.close()
    return lines

def main():
    print einlesen

Ich hab nicht so wirklich anhnung was ich bei den funktionen in die klammern schreiben muß, ich hoffe mir kann jemand helfen.

danke

Verfasst: Dienstag 25. April 2006, 17:18
von jAN
wenn du das so veränderst müsste es klappen:

Code: Alles auswählen

def einlesen():
    src = file("text.txt", "rU")
    lines = src.readlines()
    src.close()
    return lines

def main():
    print einlesen()
so werden dir die zeilen in einer liste zurückgegeben... du kannst auch

Code: Alles auswählen

print "\n".join(einlesen())
schreiben, dann wird dir direkt der inhalt der datei in der shell ausgegeben, wie er in der datei auch ist...
mfg jAN

Verfasst: Mittwoch 26. April 2006, 17:20
von DaVerve
danke schonmal, ich hab das jetzt geändert jedoch gibt er die zeilen nicht aus. Er zeigt zwar keinen fehler aber er gibt auch nicht die datei aus.
Vielleicht weiß da einer bescheid was zu tun ist?

P.S.: Ich möchte dann auch noch das eine funktion zum sortiernen eingefügt wird. Wobei in der Main dann die sortierte datei in eine andere datei gespeichert werden soll. Mein Code bis jetzt:

Code: Alles auswählen

def einlesen():
    src = file("text.txt", "rU")
    lines = src.readlines()
    src.close()
    return lines

def sort():
    lines = src.readlines()
    lines.sort()
    dest.close()

def main():
    print "\n".join(einlesen())
    dest = file("text_sort.txt", "w")
    dest.writelines(lines)
Jedoch funktioniert das so nicht, ich hoffe da kann jemand helfen.

Verfasst: Mittwoch 26. April 2006, 18:03
von jAN
gut das kann auch nciht funktionieren, da du in deiner main -funktion nicht die variable lines hast... somit kannst du auch nicht dest.writelines(lines) schreiben
ich schreib dir das ncohmal um:

Code: Alles auswählen

def einlesen():
    src = file("text.txt", "rU")
    lines = src.readlines()
    src.close()
    return lines

def sortieren(lines):
    lines.sort()
    return lines
def main():
    lines=einlesen()
    print "\n".join(lines)
    dest = file("text_sort.txt", "w")
    dest.writelines(sortieren(lines))

Verfasst: Mittwoch 26. April 2006, 19:28
von Leonidas
DaVerve hat geschrieben:Jedoch funktioniert das so nicht, ich hoffe da kann jemand helfen.
Klaro! Hier:

Code: Alles auswählen

#!/usr/bin/env python
# -*- encoding: latin-1 -*-  

def einlesen():
    src = file("dv1.py", "rU")
    lines = src.readlines()
    src.close()
    return lines

def sort():
    lines = src.readlines()
    lines.sort()
    dest.close()

def main():
    lines = einlesen()
    print "".join(lines)
    
    dest = file("text_sort.txt", "w")
    dest.writelines(lines)
    
if __name__ == '__main__':
    main()

Verfasst: Mittwoch 26. April 2006, 20:27
von jAN
@leonidas:
Könnt das sein, das mit def sort() die sort funktion für listen überschrieben wird?

Verfasst: Mittwoch 26. April 2006, 20:31
von Python 47
Nein, da das nur der Name einer Funktion ist. Die eigentliche sort() Funktion bleibt bestehen.

Verfasst: Mittwoch 26. April 2006, 20:33
von jAN
gut... ist aber trotzdem unübersichtlich

Verfasst: Mittwoch 26. April 2006, 20:38
von Python 47
jAN hat geschrieben:gut... ist aber trotzdem unübersichtlich
Was findest du denn an dem Code unübersichtlich? :?

Verfasst: Mittwoch 26. April 2006, 21:38
von Leonidas
jAN hat geschrieben:Könnt das sein, das mit def sort() die sort funktion für listen überschrieben wird?
Nein, da es ein sort() builtin nicht gibt. sort() gibt es nur als Listenmehtode, die wird dadurch aber nicht überschrieben. Das einzige Ähnliche ist das builtin sorted(), welches aber auch nicht überschrieben wird.

Verfasst: Donnerstag 27. April 2006, 00:00
von DaVerve
@leonidas
Bei deinem Code funktioniert das mit dem sortieren aber nicht, wie muß man das noch ändern das es sich sortieren läßt und ausgibt. Und dann hätte ich da noch ne frage wie kann ich vor jede zeile die dann in die datei ausgegeben wird noch eine zahl schreiben. Also es soll die sortierte Liste ausgegeben werden mit nummerierung. Weiß da jemand was??

Verfasst: Donnerstag 27. April 2006, 10:46
von jAN
diesen code fügst du zu den funktionen:

Code: Alles auswählen

def nummerieren(lines):
    for i in range(0,len(lines)):
        lines[i]=str(i+1)+lines[i]
    return lines
und bevor du die zeilen in die datei schreibst fügst du dann noch die zeile:

Code: Alles auswählen

lines=nummerieren(lines)
ein.

Verfasst: Donnerstag 27. April 2006, 12:16
von DaVerve
vielen dank an alle