Mehrere Zeilen aus Dateien lesen und wegkopieren

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
habla2k
User
Beiträge: 2
Registriert: Donnerstag 27. Januar 2011, 11:59

Hallo Zusammen,

ich habe folgendes Szenario bei dem ich Hilfe benötige.

Ich habe X Dateien, die ich durchsuchen möchte und bestimmte Zeilen dieser Dateien in eine TXT kopiere. Das klappt auch wunderbar.

Jetzt möchte ich allerdings zusätzlich noch einen anderen Wert, eine Nummer, einer bestimmten Zeile auslesen und diese soll immer als erstes in der Textdatei stehen. Es kann also sein, dass diese Nummer erst in einer Zeile steht NACHDEM schon andere Zeilen kopiert worden sind.

Die Textdatei soll später quasi so ausehen:

Nummer
Kopierte Zeile 1
Kopierte Zeile 2
Kopierte Zeile 3
...
Leerzeile
Nummer der nächsten Datei
Kopierte Zeile 1 Datei 2
Kopierte Zeile 2 Datei 2
Kopierte Zeile 3 Datei 2
...

usw.

Momentan habe ich das über 2 verschiedene FOR-Schleifen versucht, aber die zweite wird nicht durchlaufen.

Hat jemand eine Idee?

Code: Alles auswählen

import os

dirpath = irgendeinpfad
dirpathNeu = irgendeinneuerpfad
output = irgendeinetxt
dateien = os.listdir(dirpath)
if os.path.isfile(output):
    os.remove(output)
suchphrase = irgendeinwort

for file in dateien:
    if file.endswith(irgendeindateiformat):
        datei = open(dirpath+'/'+file, 'r')        
        dateiNeu = open(output, 'a')
        for line in datei.readlines():
            if line.find(kriteriumfürnummer) != -1:
                doknummer = line.split('=')[1]
        dateiNeu.write(doknummer+'\n')
        for line in datei.readlines():
            if line.find(suchphrase) != -1:
                dateiNeu.write(line.split('=')[1])
        dateiNeu.write('\n')
        datei.close()
    dateiNeu.close()
Benutzeravatar
/me
User
Beiträge: 3555
Registriert: Donnerstag 25. Juni 2009, 14:40
Wohnort: Bonn

habla2k hat geschrieben:Momentan habe ich das über 2 verschiedene FOR-Schleifen versucht, aber die zweite wird nicht durchlaufen.
Mit readlines() liest du die gesamte Datei bis zum Ende aus. Was soll da bei einem zweiten readlines() noch kommen? Entweder machst du die Datei noch mal auf oder du verwendest seek() um wieder an den Anfang zu kommen.

Alternativ könntest du die Daten natürlich auch einfach in einem Array halten um sie nicht zweimal auslesen zu müssen.

Zudem ist dein Code noch verschönerbar. Das da

Code: Alles auswählen

datei = open(dirpath+'/'+file, 'r')       
[...]
for line in datei.readlines():
sollte besser so aussehen

Code: Alles auswählen

with open(os.path.join(dirpath, file), 'r') as datei:
    [...]
    for line in datei:
Benutzeravatar
Hyperion
Moderator
Beiträge: 7478
Registriert: Freitag 4. August 2006, 14:56
Wohnort: Hamburg
Kontaktdaten:

Im übrigen benötigt man kein readlines(), da man direkt über ein file-Objekt iterieren kann.

Mit ist Dein Konzept auch noch nicht klar! Evtl. handelt es sich hier um ein XY-Problem?

Beschreib doch noch mal bitte genauer, woher welche Informationen stammen, die in eine Datei übernommen werden sollen. Evtl. kann man diese vorher geschickter "einsammeln", um dann beim späteren Schreiben weniger Probleme zu haben.
encoding_kapiert = all(verstehen(lesen(info)) for info in (Leonidas Folien, Blog, Folien & Text inkl. Python3, utf-8 everywhere))
assert encoding_kapiert
habla2k
User
Beiträge: 2
Registriert: Donnerstag 27. Januar 2011, 11:59

Hyperion hat geschrieben:Im übrigen benötigt man kein readlines(), da man direkt über ein file-Objekt iterieren kann.

Mit ist Dein Konzept auch noch nicht klar! Evtl. handelt es sich hier um ein XY-Problem?

Beschreib doch noch mal bitte genauer, woher welche Informationen stammen, die in eine Datei übernommen werden sollen. Evtl. kann man diese vorher geschickter "einsammeln", um dann beim späteren Schreiben weniger Probleme zu haben.

Eine Datei besteht aus n Zeilen mit Informationen. Ein paar dieser Zeilen beinhalten eine Nummer, die als "Überschrift" fungieren soll. Außerdem enthält die Datei einige Zeilen, die ich wegspeichern möchte. Ziel des Ganzen ist eine TXT, in der aus jeder einzelnen Datei in Verzeichnis ABC, diese Zeilen enthalten sind. Mit der Nummer darüber, damit ich weiß aus welcher Datei die nächsten Zeilen kommen.

Das der Code verbesserbar ist, glaube ich gern, ich nutze Python noch nicht lang. Muss auch nicht besonders schön sein, da es keine dauerhafte Lösung ist, sondern nur kurzfristig helfen soll.

Aber schonmal vielen Dank für die nützlichen Hinweise!
Antworten