Python mehrere Textdatein einlesen

  • Python

Es gibt 3 Antworten in diesem Thema. Der letzte Beitrag () ist von Infinity.

    Python mehrere Textdatein einlesen

    hi Leute, ich habe heute mal versucht mehrere Textdatein gleichzeitig einzulesen und jede Zeile von der Datei mit jeder Zeile der anderen zu kombinieren und in eine dritte Datei zu schreiben.
    So dafür habe ich nun folgendes Script geschrieben:

    Quellcode

    1. # -*- coding: utf-8 -*-
    2. start = raw_input("starten?")
    3. def read_txt(txt,txt2):
    4. fobj = open(str(txt) + ".txt", "r")
    5. fobj2 = open(str(txt2) + ".txt" , "r")
    6. fobj3 = open(str(txt + txt2) + ".txt" , "w")
    7. for line in fobj:
    8. for line2 in fobj2:
    9. #fobj3.write
    10. print(line.replace("\n","") + line2.replace("\n","") + "\n" )
    11. fobj.close()
    12. fobj2.close()
    13. fobj3.close()
    14. read_txt(2,3)

    So das Problem ist jetzt aber, dass er von der ersten Datei, die in der ersten for schleife eingelesen wird, nur eine Zeile einliest, mit allen von Datei2 kombiniert und dann fertig ist.
    Es soll ja aber alle Zeilen einlesen und kombinieren und nicht nur die erste.
    Ich hoffe ihr versteht was ich meine und habt eineLösung für mein problem.
    Lg shutdown
    So könnte man es machen:

    Quellcode

    1. import sys
    2. ...
    3. fobj = open(str(txt) + ".txt", "r")
    4. fobj2 = open(str(txt2) + ".txt" , "r")
    5. fobj3 = open(str(txt + txt2) + ".txt" , "w")
    6. while True:
    7. line1 = fobj.readline()
    8. line2 = fobj2.readline()
    9. if not line1:
    10. sys.stderr.write("eof 1 reached")
    11. break
    12. if not line2:
    13. sys.stderr.write("eof 2 reached")
    14. break
    15. sys.stderr.write(line1.strip('\n'))
    16. sys.stderr.write(line2)
    17. if not line2.endswith('\n')
    18. sys.stderr.write('\n')
    19. fobj.close()
    20. fobj2.close()
    21. fobj3.close()


    Hab den Code allerdings auf die Schnelle nicht geprüft.

    Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von „Infinity“ ()

    danke, aber nicht das was ich brauche

    Danke für die Antowrt, und das skript, hat auch bis auf einen fehlenden Doppelpunkt funktioniert, nur macht es nicht das was ich brauche :D, weil es jetzt zeile 1 mit zeile 1, zeile 2 mit zeil 2 etc kombiniert und ausgiebt.
    Was ich aber benötige jede zeile, mit jeder zeile, sodass man alle möglichen kombinationen bekommt.
    Ich hoffe es gibt auch eine lösung dafür.
    Lg shutdown
    Achso, dann habe ich dich falsch verstanden. Dein Ansatz ist schon ganz gut, aber es sollte klar sein wieso er nicht funktioniert: Nachdem alle Zeilen einer Datei gelesen wurden, ist die momentane Position (von der aus gelesen wird) am Ende des Streams, es kann also nichts neues mehr gelesen werden. Dazu musst du zuerst wieder die Position auf 0 setzen. Das ist nicht Python spezifisch, sondern ist generell beim Arbeiten mit Streams zu beachten.

    Quellcode

    1. fobj1 = open(str(txt) + ".txt", "r")
    2. fobj2 = open(str(txt2) + ".txt" , "r")
    3. fobj3 = open(str(txt + txt2) + ".txt" , "w")
    4. for line1 in fobj1:
    5. for line2 in fobj2:
    6. sys.stderr.write(line1.strip('\n'))
    7. sys.stderr.write(line2)
    8. if not line2.endswith('\n')
    9. sys.stderr.write('\n')
    10. fobj2.seek(0)
    11. fobj.close()
    12. fobj2.close()
    13. fobj3.close()


    Den Code habe ich wieder auf die Schnelle geschrieben und nicht getestet.