-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathmain.py
More file actions
52 lines (41 loc) · 2 KB
/
Copy pathmain.py
File metadata and controls
52 lines (41 loc) · 2 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
import argparse
import csv
from collections import defaultdict
from typing import List, Dict
from tabulate import tabulate
class ReportGenerator:
def __init__(self):
self.brand_ratings = defaultdict(list)
def process_file(self, file_path: str):
with open(file_path, mode='r', encoding='utf-8') as file:
reader = csv.DictReader(file)
for row in reader:
brand = row['brand']
try:
rating = float(row['rating'])
self.brand_ratings[brand].append(rating)
except ValueError:
print(f"Ошибка при обработке рейтинга для бренда {brand}")
def calculate_average_ratings(self) -> List[tuple]:
averages = []
for brand, ratings in self.brand_ratings.items():
avg_rating = round(sum(ratings) / len(ratings), 2)
averages.append((brand, avg_rating))
return sorted(averages, key=lambda x: x[1], reverse=True)
def generate_report(self, report_type: str) -> List[tuple]:
if report_type == 'average-rating':
return self.calculate_average_ratings()
raise ValueError(f"Неизвестный тип отчета: {report_type}")
def main():
parser = argparse.ArgumentParser(description="Генератор отчетов по рейтингам товаров")
parser.add_argument('--files', nargs='+', required=True, help='Список файлов с данными')
parser.add_argument('--report', required=True, help='Тип отчета')
args = parser.parse_args()
generator = ReportGenerator()
for file in args.files:
generator.process_file(file)
report_data = generator.generate_report(args.report)
headers = ["Бренд", "Средний рейтинг"]
print(tabulate(report_data, headers=headers, tablefmt="grid"))
if __name__ == "__main__":
main()