已知文件中存有100个产品的销售记录,每个产品销售记录由产品代码dm、产品名称mc、单价dj、数量sl、和金额je五个部分组成。其中金额=单价×数量。要求编写一个函数实现按产品代码从大到小进行排序,若产品代码相同,则按金额从大到小排序,最后将排序的结果输出到另一文件中。
时间: 2024-02-23 20:01:00 浏览: 60
这是一个比较典型的数据处理问题,可以通过编写Python程序来解决。下面是一个可能的解决方案:
```python
def sort_sales_records(input_file, output_file):
"""
按产品代码从大到小排序销售记录,并将结果输出到另一文件中
:param input_file: 输入文件名
:param output_file: 输出文件名
"""
records = []
with open(input_file, 'r') as f:
for line in f:
dm, mc, dj, sl = line.strip().split()
je = float(dj) * int(sl)
records.append((dm, mc, dj, sl, je))
records.sort(key=lambda x: (-int(x[0]), -x[4]))
with open(output_file, 'w') as f:
for dm, mc, dj, sl, je in records:
f.write('{}\t{}\t{}\t{}\t{:.2f}\n'.format(dm, mc, dj, sl, je))
```
该函数接受输入文件名和输出文件名两个参数,读取输入文件中的销售记录,按照产品代码从大到小、金额从大到小的顺序进行排序,然后将排序结果输出到输出文件中。
在函数内部,我们首先读取输入文件中的每一行记录,将其拆分成五个部分,并计算出金额。然后将这些记录存储在一个列表中。接着使用Python内置的`sort()`函数对这个列表进行排序。排序时,我们使用`lambda`表达式来指定排序的关键字。`key=lambda x: (-int(x[0]), -x[4])`表示先按照第一个元素(产品代码)从大到小排序,如果产品代码相同,则按照第五个元素(金额)从大到小排序。这里使用负数是为了实现降序排列。
最后,我们将排序结果按照要求输出到输出文件中。在输出每一行记录时,我们使用字符串格式化来保证金额只保留两位小数。
阅读全文