2016-04-27 19 views
0

Ich habe Probleme beim Hinzufügen bestimmter Werte aus einer Tabelle in Python erstellt.
Meine Textdatei wie folgt aussieht:Erstellen einer Tabelle aus einer Textdatei und Hinzufügen einer Spalte

E5345,22/09/2015,C106,815,A,400 
E5348,23/09/2015,C109,370,A,200 
E5349,25/09/2015,C110,480,A,250 
E5353,28/09/2015,C114,272,A,200 
E5363,01/10/2015,C124,930,A,500 
E5364,02/10/2015,C125,915,A,800 
E5365,02/10/2015,C126,1486,A,1486 
E5366,03/10/2015,C127,576,E,0 
E5367,03/10/2015,C128,427,A,350 
E5373,10/10/2015,C134,1023,A,550 

ich eine Tabelle auf Python erstellen möchten diese Werte verwenden und eine andere Spalte erstellen, Ausstehender Betrag betitelt. Ich habe es geschafft, aber ich würde gerne die Gesamtsumme der ausstehenden finden. Dies wird gefunden, indem die vierte Spalte (finaltotal) die sechste Spalte subtrahiert wird. (amountpaid).
Mein Code so weit ist:

headers = ["| Estimate Number", "| Date", "| Customer Number", "| Final Total", "| Status", "| Amount Paid", "| Outstanding Amount"] 
print(" ".join(headers)) 
print ("\n-------------------------------------------------------------------------------------------------------------------------") 
data = open("paintingJobs.txt", "r") 
info=data.readlines() 
data.close() 
for li in info: 
     line = li.strip().split(",") 
     status=line[4] 
     finaltotal=int(line[3]) 
     amountpaid=int(line[5]) 
     subtotal = int(line[3]) - int(line[5]) 
     outstanding = (finaltotal) - (amountpaid) 
     line.append(str(subtotal)) 
     if (amountpaid) < (finaltotal) and status == "A": 
       for i, word in enumerate(line): 
        print(word.ljust(len(headers[i - (i > 20)])), end="  " * ((i - (i > 20)) != len(headers) - 1)) 
       print() 
       print ("-------------------------------------------------------------------------------------------------------------------------") 

    print ("\nThe total revenue is") 

Mein idealer Ausgang ist:

| Estimate Number | Date | Customer Number | Final Total | Status | Amount Paid | Outstanding Amount 

------------------------------------------------------------------------------------------------------------------------- 
E5345     22/09/2015  C106     815    A   400    415 
------------------------------------------------------------------------------------------------------------------------- 
E5348     23/09/2015  C109     370    A   200    170 
------------------------------------------------------------------------------------------------------------------------- 
E5349     25/09/2015  C110     480    A   250    230 
------------------------------------------------------------------------------------------------------------------------- 
E5353     28/09/2015  C114     272    A   200    72 
------------------------------------------------------------------------------------------------------------------------- 
E5355     29/09/2015  C116     530    A   450    80 
------------------------------------------------------------------------------------------------------------------------- 
E5363     01/10/2015  C124     930    A   500    430 
------------------------------------------------------------------------------------------------------------------------- 
E5364     02/10/2015  C125     915    A   800    115 
------------------------------------------------------------------------------------------------------------------------- 
E5367     03/10/2015  C128     427    A   350    77 
------------------------------------------------------------------------------------------------------------------------- 
E5373     10/10/2015  C134     1023    A   550    473 
------------------------------------------------------------------------------------------------------------------------- 

The total outstanding is 
£2062 

Die Gesamt outstanding durch Auffinden der Summe der outstanding Mengen gefunden wird. Die ausstehende Menge wird durch finaltotal minus amountpaid gefunden. Jede Hilfe würde sehr geschätzt werden.

+0

Mit welchem ​​Teil hast du ein Problem? –

+0

Ich möchte die Summe der letzten Spalte (ausstehende Menge) finden und ausdrucken. Es sollte 2062 entsprechen – Seruza

Antwort

1

Verwenden Sie einfach eine Variable außerhalb der Schleife, um den Überblick zu behalten. Ich schließe Personen aus, die zu viel bezahlen, aber wenn Sie das von der Summe abziehen möchten, können Sie die if-Anweisung entfernen.

total = 0 
for li in info: 
    ... 
    outstanding = (finaltotal) - (amountpaid) 
    if outstanding > 0: 
     total += outstanding 

print 'The total outstanding is {}'.format(total) 
1

Warum verwenden Sie nicht die Pandas-Bibliothek? Angenommen, Ihre Initialtabelle befindet sich in einer CSV-Datei mit der Bezeichnung example.csv. Sie können dies in sehr wenigen Schritten tun, wie folgt:

from pandas import read_csv 

df = read_csv('~/Documents/example.csv', header=None) 
df.columns = ["Estimate Number", "Date", "Customer Number", "Final Total", "Status", "Amount Paid"] 
df['Outstanding Amount'] = df['Final Total'] - df['Amount Paid'] 

Dann haben Sie Optionen für Ihre Ausgabe. Sie könnten Ausgabe zurück in eine CSV-Datei:

df.to_csv() 

oder ausdrucken:

table_as_text = df.to_string() 
print(table_as_text) 

, die Ihnen:

Estimate Number  Date Customer Number Final Total Status Amount Paid Outstanding Amount 
0   E5345 22/09/2015   C106   815  A   400     415 
1   E5348 23/09/2015   C109   370  A   200     170 
2   E5349 25/09/2015   C110   480  A   250     230 
3   E5353 28/09/2015   C114   272  A   200     72 
4   E5363 01/10/2015   C124   930  A   500     430 
5   E5364 02/10/2015   C125   915  A   800     115 
6   E5365 02/10/2015   C126   1486  A   1486     0 
7   E5366 03/10/2015   C127   576  E   0     576 
8   E5367 03/10/2015   C128   427  A   350     77 
9   E5373 10/10/2015   C134   1023  A   550     473 

und die Summe zu berechnen, würden Sie tun:

outstanding_amount = df["Outstanding Amount"].sum() 
print(outstanding_amount) 

Auschecken http://pandas.pydata.org/pandas-docs/stable. Ich hoffe, das hilft!

Verwandte Themen