【问题标题】:Creating a table from a text file and adding a column从文本文件创建表并添加列
【发布时间】:2016-08-22 02:46:58
【问题描述】:

我在从 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

我希望使用这些值在 python 上创建一个表,并创建另一列,标题为未偿金额。我已经设法做到了,但我想找到未偿还的总和。这是通过将第四列 (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 得出。任何帮助将不胜感激。

【问题讨论】:

  • 您的哪一部分有问题?
  • 我想找到最后一列的总和(未结金额)并打印出来。它应该等于 2062

标签: python python-2.7 text input output


【解决方案1】:

只需在循环外使用一个变量来跟踪总数。我排除了多付的人,但如果你想从总数中扣除,你可以删除if 声明。

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

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

【讨论】:

    【解决方案2】:

    为什么不使用 Pandas 库?假设您的初始表位于名为 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。希望对您有所帮助!

    【讨论】:

      猜你喜欢
      • 2020-10-25
      • 1970-01-01
      • 2013-07-27
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多