2017-07-24 2 views
0

Ich muss Skript in Python, die akzeptieren und verbinden 2 Dateien zu einer neuen Datei nach der folgenden Regel: 1) nehmen Sie 1 Wort aus der ersten Datei, gefolgt von 2 Wörter aus der zweiten Datei. 2) Wenn wir das Ende von 1 Datei erreichen, muss ich den Rest der anderen Datei in die zusammengeführte Datei ohne Änderung kopieren.Python merge Dateien nach Regeln

Ich schrieb dieses Skript, aber ich konnte nur 1 Wort aus jeder Datei lesen. Komplettes Skript wird nett sein, aber ich möchte wirklich mit Worten verstehen, wie ich das selbst machen kann.

Das ist, was ich schrieb:

def exercise3(file1,file2): 
    lstFile1=readFile(file1) 
    lstFile2=readFile(file2) 

    with open("mergedFile", 'w') as outfile: 
     merged = [j for i in zip(lstFile1, lstFile2) for j in i] 
     for word in merged: 
      outfile.write(word) 


def readFile(filename): 
    lines = [] 
    with open(filename) as file: 
     for line in file: 
      line = line.strip() 
      for word in line.split(): 
       lines.append(word) 
    return lines 

Antwort

0

Ihr unmittelbares Problem ist, dass zip wechselt Elemente aus den Iterables Sie es geben: Abbildung 1, wo Sie 1 müssen: kurz gesagt, es ist ein 1 ist 2. Versuchen Sie dies:

lstFile2a = listfile2[0::2] 
lstFile2b = listfile2[1::2] 
... zip(lstfile1, listfile2a, lstfile2b) 

Dies ist ein bisschen ineffizient, aber die Arbeit erledigt.

Eine andere Möglichkeit besteht darin, Paare (2-Tupel) in lstFile2 zu zippen, bevor Sie sie mit lstFile1 zippen. Eine dritte Möglichkeit ist, ganz zu vergessen, zippen, und Ihre eigene Indizierung:

for i in min(len(lstFile1), len(lstFile2)//2): 
    outfile.write(lstFile1[i]) 
    outfile.write(lstFile2[2*i]) 
    outfile.write(lstFile2[2*i+1]) 

Doch dies läßt Dich mit den Resten der längeren Datei zu handhaben.

Diese sind nicht besonders elegant, aber sie sollten Sie in Bewegung bringen.