2016-04-27 69 views
0

我在从Python上创建的表中添加某些值时遇到了一些麻烦。
我的文本文件看起来像:从文本文件创建表格并添加列

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 

我希望创建使用这些值在蟒蛇一个表,并创建另一个列,标题为优秀金额。我已经设法做到这一点,但我想找到未付款的总和。这是通过执行第四列(​​finaltotal)减去第六列而找到的。 (amountpaid)。
到目前为止我的代码是:

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") 

我的理想输出为:

| 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 

outstanding通过找到outstanding量的总和找到。未付金额为finaltotal减去amountpaid。任何帮助将非常感激。

+0

你有什么问题? –

+0

我想找到最后一列(未付金额)的总和并打印出来。它应该等于2062 – Seruza

回答

1

只需在循环外使用一个变量来跟踪总数。我不包括那些多付的人,但是如果您想从总额中扣除,您可以删除if声明。

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

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

为什么不使用熊猫图书馆?假设您的初始表位于名为example.csv的csv文件中。您可以通过几个步骤完成此操作,例如:

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'] 

然后您可以选择输出。你可以输出回到一个CSV文件:

df.to_csv() 

或打印:

table_as_text = df.to_string() 
print(table_as_text) 

,这将给你:

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 

并计算总和,你会怎么做:

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

结帐http://pandas.pydata.org/pandas-docs/stable。希望有所帮助!