2016-11-02 1 views
0

Ich habe ein schnelles Dateivergleichs-Tool erstellt, das nach den Unterschieden zwischen zwei Dateien sucht. Mir wurde plötzlich klar, dass ich wahrscheinlich die Zeilennummer benötige, bei der die Differenz auftritt. Hat jemand irgendwelche Tipps, wie ich das in den folgenden Code einbauen sollte?Gibt es Tipps zum Abrufen einer Zeilennummer aus einer Textdatei in Python?

def fileCompare(): 
    systemList=os.listdir("S:\\Automation_Results") 
    for system in systemList: 
     resFilesList=os.listdir("S:\\Automation_Results\\"+system) 
     for resFile in resFilesList: 
      if os.path.isfile("S:\\KnownGoodOutput\\"+resFile)==True: 
       with open("S:\\KnownGoodOutput\\"+str(resFile)) as kFile: 
        kSet=set(kFile) 
        with open("S:\\Automation_Results\\"+str(system)+"\\"+str(resFile)) as tFile, open("S:\\FC_Result_Files\\Compare_Results for"+str(system)+".txt","w") as fcFile: 
         fcFile.writelines(line for line in tFile if line not in kSet) 

Ich dachte, ich würde wahrscheinlich einen Zähler zu erhöhen, haben wie die Zeilen zu lesen sind, aber ich glaube, bräuchten meine vergleichen Methode für das wiederholen, obwohl ich hoffe, ich bin falsch, wie ich mag diese Methode. ..läuft wirklich gut.

Ich sehe nicht, wie meine Frage ein Duplikat ist, was verlinkt wurde. Hier erhalte ich eine Zeilennummer in einer Datei, wenn zwischen zwei verglichenen Dateien eine Nichtübereinstimmung auftritt. In dem Link erhalten sie nur die gesamten Zeilennummern in einer Datei. Ja, einige der Antworten verwenden Aufzählung, aber nicht auf diese Weise. Wenn ich nur Linien zählen wollte ... nun ... hätte ich nicht gefragt. This link hat mehr gemeinsam mit dem, was ich mache, aber da es zu einem anderen Thema suchen würde es sehr unwahrscheinlich gewesen und es ist immer noch ein völlig anderer Anwendungsfall.

+0

Ich glaube nicht, das ein Betrogene ist – Ranveer

Antwort

0

Ich denke, so etwas wie dies funktionieren soll:

fcFile.writelines('{}: {}'.format(line_number, line) 
        for line_number, line in enumerate(tFile) 
        if line not in kSet) 
+0

Ahh ... ich völlig über ... forgot aufzählen, obwohl in meiner Verteidigung Datei ist Manipulation nicht, was Ich verwende normalerweise Python für. Für zukünftige Viewer sollten Sie den Anfang der Enumerate festlegen ... in meinem Fall muss ich nur ändern ... enumerate (tFile, start = 1), sonst sind meine Zeilennummern eins. Danke eine Million –

+0

Etwas anderes ist auf diese Frage gekommen. Ich muss den Wert von line_number erfassen. Ich möchte es verwenden hat eine Variable an anderer Stelle. Ich versuche es zu verwenden, um die Zeile der Datei zu drucken, mit der die Ergebnisdatei verglichen wird. Ich lege die Datei in eine Liste und versuche dann: fcFile.writelines ('{}: {}'. Format (Zeilennummer, Zeile, kLines [Zeilennummer]) ... und es gibt mir einen Index außerhalb des Bereichs, weil line_number hat scheinbar keinen Wert, obwohl es in der Ausgabedatei einwandfrei gedruckt wird –

+0

@VagrantStorm Stellen Sie eine neue Frage und fügen Sie Ihren aktuellen Code ein. – smarx

Verwandte Themen