我正在开发一个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,2211Sugar 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()
答案 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()