Wie Zeilen in zwei Dateien mit Bedingung in Python zu kombinieren?

8

Ich muss Zeilen in zwei Dateien kombinieren, basierend auf der Bedingung, dass in der Zeile einer der Dateien ein Teil der Zeile der zweiten Datei steht.

Ein Teil der ersten Datei:

%Vor%

Ein Teil der zweiten Datei:

%Vor%

Ich muss eine Datei erstellen, aus der die Zeile besteht: die gesamte Zeile aus der ersten Datei und alles aus der Zeile der zweiten Datei. außer dem Dateinamen in der ersten Spalte.

Wie Sie sehen können, gibt es mehr als eine Zeile in der ersten Datei, die einer Zeile in der zweiten Datei entspricht. Ich brauche diese Operation mit jeder Zeile, also sollte die Ausgabe wie folgt aussehen:

%Vor%

Ich habe diesen Code geschrieben:

%Vor%

Aber es druckt das aus, und nichts mehr, da sind 45 Zeilen in der ersten Datei:

%Vor%

Was ist falsch an dem Code? Oder sollte es irgendwie ganz anders gemacht werden?

    
Phlya 30.03.2012, 21:23
quelle

3 Antworten

2

Beachten Sie, dass diese Lösung nicht auf die Länge eines Feldes angewiesen ist, mit Ausnahme der Länge der Dateierweiterung in der zweiten Datei.

%Vor%

Nur zu Testzwecken habe ich Folgendes verwendet:

%Vor%

Hier sollten Sie nur normale Dateiobjekte verwenden. Die Ausgabe für die Testdaten ist:

%Vor%     
agf 30.03.2012, 21:35
quelle
6

Dateihandles in Python haben Status; das heißt, sie funktionieren nicht wie Listen. Sie können wiederholt über eine Liste iterieren und erhalten alle Werte jedes Mal heraus. Dateien haben dagegen eine Position, ab der der nächste read() auftritt. Wenn Sie über die Datei iterieren, geben Sie read() für jede Zeile an. Wenn Sie die letzte Zeile erreichen, befindet sich der Dateizeiger am Ende der Datei. Ein read() vom Ende der Datei gibt die Zeichenfolge '' !

zurück

Was Sie tun müssen, lesen Sie in der oocytes -Datei einmal am Anfang, und speichern Sie die Werte, etwa so:

%Vor%     
Cuadue 30.03.2012 21:39
quelle
1

Nun, einfache Dinge zuerst, druckten Sie den Zeilenumbruch am Ende der Zeile - Sie würden das mit der Zeile [0: -1]

ablegen wollen

Als nächstes testet "lines [0: 7]" nur die ersten 7 Zeichen der Zeile - Sie wollten 8 Zeichen testen. Deshalb wurde der gleiche Wert von "line" mit 3 verschiedenen Mutantenwerten ausgedruckt.

Schließlich müssen Sie die Oozyten für jede Zeile in den Ergebnissen schließen und erneut öffnen. Wenn Sie dies nicht getan haben, wurde Ihre Ausgabe nach der ersten Zeile der Ergebnisse beendet.

Eigentlich ist die andere Antwort besser - öffne und schließe die Oozyten nicht für jede Zeile von Ergebnissen - öffne sie und lies sie einmal (in eine Liste) ein, dann überspringe sie für jede Zeile der Ergebnisse.

    
Frank Klotz 30.03.2012 21:40
quelle

Tags und Links