2016-06-06 15 views
0

Ich habe wie so mit einer Textdatei arbeiten:Lesen und Schreiben von Textdateien

<KeyPlat> = 1228.3 
<KeyTran> = 690.3 
<KeyTotal> = 1918.6 
<KavPlat> = 2996.3 
<KavTran> = 3811.4 
<KavTotal> = 6807.7 

Ich versuche, diese Daten zu verwenden, um eine neue Textdatei mit der erwarteten Ausgabe wie folgt zu schreiben:

Table 1 
Platform 1228.3 
Transfers 690.3 

Table 2 
Platform 1918.6 
Transfers 2996.3 
Total  6807.7 

Ich versuche, nur die Zahlen herauszuziehen und sie zu speichern, um in eine neue Datei zu schreiben. Die Methode, die ich verwendete, war, nach Schlüsselfiguren zu suchen und wenn ich anfange, die Zahlen zu ziehen. Ich bin mir nicht sicher, wohin ich von diesem Punkt aus gehen soll.

def foo(): 
     # Open write and read files. 
     f1 = open('text.txt', 'r') 
     f2 = open('to.txt', 'w') 


     f2.write("Table 1"\n) 
     f2.write("Platform\t") 
     #Start of digit information 
     searchquery = '=' 
     #End of digits 
     searchquery2 = '<' 
     for line in f1: 
      for letter in line: 
        if letter is not isdigit(): 

        if letter == searchquery: 

        if letter == searchquery2: 
+0

Warum ist 'Gesamt 1918.6' aus der ersten Tabelle Strophe fehlt? – Kaz

Antwort

1

Anstatt zeichenweise Überprüfung würde ich vorschlagen, das Stichwort in auf der Leitung. Sie können dann split verwenden, um auf einfache Weise eine Liste von Wörtern zu generieren, die zwischen Whitespaces liegen, zum Beispiel ["<KeyPlat>", "=", "1228.3"] wäre das Ergebnis von "<KeyPlat> = 1228.3".split(' '). Und dann müssen Sie nur Ihre Ausgabe formatieren, wie Sie es bevorzugen. Ich bevorzuge .format-Notation.

Ich benutzte lines als eine Abkürzung. Sie sollten stattdessen Ihre Datei verwenden.

lines = ["<KeyPlat> = 1228.3", "<KeyTran> = 690.3", "<KeyTotal> = 1918.6"] 

f1 = open("testtable.txt", "w") 

for line in lines: 
    values = line.split(' ') 
    if "KeyPlat" in values[0]: 
     print("{0:10s}{1:10s}".format("Platform", values[2]), file=f1) 
    elif "KeyTran" in values[0]: 
     print("{0:10s}{1:10s}".format("Transfers", values[2]), file=f1) 
    elif "KeyTotal" in values[0]: 
     print("{0:10s}{1:10s}".format("Total", values[2]), file=f1) 

f1.close() 

Ausgang:

Platform 1228.3  
Transfer 690.3  
Total  1918.6 
2

Dies ist eine rudimentäre Transformation Aufgabe maßgeschneidert für schnelle Behandlung über TXR. Ich habe gerade die Beispieldaten und Ausgabe in xform.txr kopiert und eingefügt, dann hinzugefügt Richtlinien und Variablen:

$ txr xform.txr data 
Table 1 
Platform 1228.3 
Transfers 690.3 
Total  1918.6 

Table 2 
Platform 2996.3 
Transfers 3811.4 
Total  6807.7 

-Code in xform.txr:

@(collect) 
<@{prefix}Plat> = @plat 
<@{prefix}Tran> = @tran 
<@{prefix}Total> = @tot 
@(end) 
@(output) 
@ (repeat :counter (table 1)) 
Table @table 
Platform @plat 
Transfers @tran 
Total  @tot 

@ (end) 
@(end)