<p>下面是一个Python解决方案。它将<em>错误</em>行写入输出文件,并将正确的行写入终端</p>
<pre><code>from collections import defaultdict
import re
d = defaultdict(int)
with open('f0.txt', 'r') as f, open('err.txt', 'w') as fout:
fout.write(f.readline()) # print header to err.txt
for row in f:
row = row.rstrip()
if re.search(r'- \d+g"', row):
month, yr, qty, product = row.split(', ')
product = product.replace('g', '').replace('"', '')
name, grams = product.split(' - ')
key = ','.join([month, yr, name])
d[key] += int(qty) * int(grams)
else:
# handle this row (that doesn't have a Product and weight)
fout.write(row + '\n')
print(','.join(['Month', 'Year', 'Product Name', 'Total Sold']))
for key, total in d.items():
print(f'{key},{total}')
</code></pre>
<p>打印到终端:</p>
<pre><code>Month,Year,Product Name,Total Sold
11,2017,Creatine,41000
11,2017,Glucosamine,40000
12,2017,Creatine,17000
12,2017,Glucosamine,31500
1,2018,Creatine,21000
1,2018,Glucosamine,37000
</code></pre>
<p>打印到err.txt:</p>
<pre><code>Month, Year, Quantity Sold, Product Name
11, 2017, 10, "Gummies 1 bag"
1, 2018, 10, "Gummies 1 bag"
</code></pre>