为食品加工公司读取和写入文件

时间:2016-02-05 18:55:52

标签: python parsing python-3.x

我正在开发一个Python项目,一家食品加工公司正试图计算其当年的总销售额。 Python必须从一个文本文件中读取,其中它被分成用逗号分割的类别。第一类是产品类型,可以是公司生产的谷物,巧克力糖等。第二类是所述产品的品牌,例如,用于谷物的Kaptain Krunch或用于巧克力的Coco Jam。第三类是上一财年(2014年)的销售额,最后一类是本财政年度(2015年)的销售额。请注意,仅计算2015财年的销售额。 2014年在这个计划中没有用,但它就在那里。以下是文本文件的外观。它的名字是product.txt

  

谷物,魔法球,2200,2344

     

Cereal,Kaptain Krunch,3300,3123

     

Cereal,Coco Bongo,1800,2100

     

谷物,糖蒙克,4355,6500

     

Cereal,Oats n Barley,3299,5400

     

Sugar Candy,Pop Rocks,546,982

     <糖>糖果,棒棒糖,1233,1544

     <糖>糖果,Gingerbud,2344,2211

     

Sugar Candy,Respur,1245,2211

     

Chocolate,Coco Jam,3322,4300

     

巧克力,拉克斯珀,1600,2200

     

Chocolate,Mighty Milk,1234,2235

     

Chocolate,Almond Berry,998,1233

     

调味品,花生酱,3500,3902

     

调味品,辣酱,1234,1560

     

调味品,果冻,346544

     

调味品,传播,2334,5644

我们打算做的是按产品添加2015财年的销售额,然后在2015年增加所有产品的总销售额

输出应该类似于书面文本文件

  

2015年谷物销售总额:{此处插入总数}

     

2015年Sugar Candy的总销售额:{此处插入总数}

     

2015年巧克力总销售额:{此处插入总数}

     

2015年调味品的总销售额:{此处插入总数}

           

2015年公司的总销售额:{插入所有公司的总额   2015年销售的产品}

除此之外,它还应该在IDE中的Python运行屏幕上打印总计和文本文件。

  

2015年公司的总销售额:{插入所有公司的总额   2015年销售的产品}

这是我的代码。我是Python新手,阅读和编​​写文件,所以我不能说我是否走在正确的轨道上。

PRODUCT_FILE = "products.txt"
REPORT_FILE = "report.txt"

def main():
    #open the file
    productFile = open(PRODUCT_FILE, "r")
    reportFile = open(REPORT_FILE, "w")

    # reading the file
    proData = extractDataRecord(productFile)
    product = proData[0]
    category = proData[1]
    salesLastYear = prodata[2]
    salesThisYear = proData[3]

    #computing
    product = 0.0
    product = salesThisYear


    productFile.close()
    reportFile.close()

def extractDataRecord(infile) :
   line = infile.readline()
   if line == "" :
      return []
   else :
      parts = line.rsplit(",", 1)
      parts[1] = int(parts[1]) 
      return parts

# Start the program.
main()

1 个答案:

答案 0 :(得分:1)

这里的简短版本是你做错了。如果可以提供帮助,请不要滚动自己的解析代码。我建议看看the built-in csv module,并尝试使用它来“收缩”CSV解析,让你专注于其余的逻辑。

使用csv简单重写和完成代码:

import collections
import csv

PRODUCT_FILE = "products.txt"
REPORT_FILE = "report.txt"

def main():
    # Easy way to get a dictionary where lookup defaults to 0
    categorycounts = collections.defaultdict(int)

    #open the files using with statements to ensure they're closed properly
    # without the need for an explicit call to close, even on exceptions
    with open(PRODUCT_FILE, newline='') as productfile,\
         open(REPORT_FILE, "w") as reportfile:
        pcsv = csv.reader(productfile)

        # Sum sales by product type letting csv parse
        # Filter removes empty rows for us; assume all other rows complete
        for category, brand, sales_lastyear, sales_thisyear in filter(None, pcsv):
            categorycounts[category] += int(sales_thisyear)

        # Print categories in sorted order with their total sales
        for category, sales in sorted(categorycounts.items()):
            print('Total sales for', category, 'in 2015:', sales, file=reportfile)

        print('-'*80, file=reportfile) # Separator line between categories and total

        # Sum and print total sales to both file and screen
        totalsales = sum(categorycounts.values())
        print("Total sales for the company in 2015:", totalsales, file=reportfile)
        print("Total sales for the company in 2015:", totalsales)

if __name__ == '__main__':
    main()