CBOOK.csv 读取附件中的图书数据信息,并按照下列要求对数据进行统计分析(文件编码为utf-8) 文件包含信息格式:编号,书名,出版社,现价,原价,评论数,推荐指数 其中评论数形式为'1290021条评论',书名可能包含书的简单描述,形如'雪落香杉树(福克纳奖得主,全球畅销500万册)'。 要求: 输入一个字符串 输入是'record',统计输出图书数据的总数量,格式见示例 输入是'rank',需要再输入一个书籍编号,分别输出编号对应的书籍信息(编号,书名,出版社,现价,原价,评论数,推荐指数),格式见示例 输入是'maxcomment',输出评论数量最多的10本书的书名和评论数,按评论数量降序排序,格式见示例 输入是'maxname',需要再输入一个数值n,输出书名最长的n本书的名字,按书名长度降序排序,格式见示例 非以上输入,输出'无数据' 下列示例仅表明输入输出格式,输出的数据不是本题答案数据
时间: 2024-02-03 18:15:49 浏览: 128
```python
import csv
# 读取文件,返回列表
def read_csv():
data = []
with open('CBOOK.csv', 'r', encoding='utf-8') as f:
reader = csv.reader(f)
for row in reader:
data.append(row)
return data
# 统计图书数量
def count_books():
data = read_csv()
return len(data)
# 根据编号查找图书信息
def search_book_by_id(book_id):
data = read_csv()
for row in data:
if row[0] == book_id:
return row
return None
# 统计评论数量最多的10本书
def max_comment():
data = read_csv()
sorted_data = sorted(data, key=lambda x: int(x[5].split('条评论')[0]), reverse=True)[:10]
result = []
for row in sorted_data:
result.append([row[1], row[5].split('条评论')[0]])
return result
# 统计书名最长的n本书
def max_name(n):
data = read_csv()
sorted_data = sorted(data, key=lambda x: len(x[1]), reverse=True)[:n]
result = []
for row in sorted_data:
result.append(row[1])
return result
# 根据用户输入进行不同的统计分析
def analyze_data(input_str):
if input_str == 'record':
return f'图书数据总数量为:{count_books()}'
elif input_str.startswith('rank'):
book_id = input_str.split(' ')[-1]
book_info = search_book_by_id(book_id)
if book_info:
return f'编号:{book_info[0]}, 书名:{book_info[1]}, 出版社:{book_info[2]}, 现价:{book_info[3]}, 原价:{book_info[4]}, 评论数:{book_info[5]}, 推荐指数:{book_info[6]}'
else:
return '无数据'
elif input_str == 'maxcomment':
result = max_comment()
if result:
output_str = '评论数量最多的10本书为:\n'
for row in result:
output_str += f'书名:{row[0]}, 评论数:{row[1]}\n'
return output_str
else:
return '无数据'
elif input_str.startswith('maxname'):
n = int(input_str.split(' ')[-1])
result = max_name(n)
if result:
output_str = f'书名最长的{n}本书为:\n'
for book_name in result:
output_str += f'{book_name}\n'
return output_str
else:
return '无数据'
else:
return '无数据'
# 测试
print(analyze_data('record'))
print(analyze_data('rank 12345'))
print(analyze_data('maxcomment'))
print(analyze_data('maxname 5'))
print(analyze_data('test'))
```
阅读全文