2022-05-09_作业

"""
Author: Kevin
Date: 2022/5/7, 17:35
Any small effort multiply by 365 will be significant
"""
import csv
from datetime import datetime
# 第一题
# 打开作业文档, 所在的文档目录不同得根据自己文档的地址来调整
reader = csv.DictReader(open('./demo1/北京高档酒店价格分析.csv', encoding='utf-8'))
# 这里创建一个新的列表来判断区时候已经被判断过
list1 = []
# 转换成列表
reader = list(reader)
# 遍历文档, 遍历的每个数据是个独立的字典
for x in reader:
    name = x['地区']
    # 判断这个地区是否不存在list1里面
    if name not in list1:
        # 不存在的话, 往list1里面添加这个区名
        list1.append(name)
        # 同时创建一个csv文档来保存这个区的数据, 注意这里使用的是'w',所在的文档目录不同得根据自己文档的地址来调整
        writer = csv.DictWriter(open(f'./demo1/北京{name}高档酒店.csv', 'w', encoding='utf-8', newline=''), x.keys())
        # 写抬头
        writer.writeheader()
        # 写入这个区
        writer.writerow(x)
    else:
        # 如果这个区已经在list1里面的话后续的就直接添加进这个区的文档内就行, 注意这里使用的是'a',所在的文档目录不同得根据自己文档的地址来调整
        writer = csv.DictWriter(open(f'./demo1/北京{name}高档酒店.csv', 'a', encoding='utf-8', newline=''), x.keys())
        # 写入这个区
        writer.writerow(x)

# 第二题
# 打开作业文档,所在的文档目录不同得根据自己文档的地址来调整
reader = csv.DictReader(open('./demo1/2018年北京积分落户数据.csv', encoding='utf-8'))
reader = list(reader)
# 这个题目想要更进一步的话可以调用datetime模块导入当前年份如果年份变化的话可以一直用
# 以及还可以先把日期添加进去后再进行判断如果到了这个日子才满当年的生日
# 不然的话依旧是上一年的年龄
total_age = 0
for x in reader:
    total_age += 2022 - int(x['birthday'][:4])
print(f'{total_age / len(reader):.2f}')

import random


def random_day(year: str, month: str):
    """
    根据给出的年份以及月份来随机生成一个日期
    :param year: 给出年份,为了之后判断是否是闰年
    :param month: 给出月份,判断这个月有多少天进而确定随机范围
    :return: 返回日期
    """
    year = int(year)
    # 判断给出的月份是否是2月份
    if month == '02':
        # 如果是的话再判断是否是闰年
        if (year % 4 == 0 and year % 100 != 0) or year % 400 == 0:
            # 如果是的话随机数1-29,同时用f字符串把生成的日子凑够2位数比如是9 -> 09
            return f'{random.randint(1, 29):0>2}'
        # 不是的话随机数1-28
        return f'{random.randint(1, 28):0>2}'
    # 如果不是2月份是以下月份的话
    elif month in ('01', '03', '05', '07', '08', '10', '12'):
        # 随机数1-31
        return f'{random.randint(1, 31):0>2}'
    # 如果都不是以上月份的话那么随机数1-30
    return f'{random.randint(1, 30):0>2}'

# 这两行是写抬头
# 所在的文档目录不同得根据自己文档的地址来调整
writer = csv.DictWriter(open('./demo1/2018年北京积分落户数据1.csv', 'w', encoding='utf-8', newline=''), reader[0].keys())
writer.writeheader()
# 遍历添加日期
for x in reader:
    # 所在的文档目录不同得根据自己文档的地址来调整
    writer = csv.DictWriter(open('./demo1/2018年北京积分落户数据1.csv', 'a', encoding='utf-8', newline=''), x.keys())
    # 把日期从新赋值,同时调用上面创建的函数
    x['birthday'] = x['birthday'] + f'-{random_day(x["birthday"][:4], x["birthday"][:5])}'
    # 从新赋值后写入新的文档内
    writer.writerow(x)

# 判断是否是狮子座 7月23日-8月22日
# 打开刚刚添加好日期的csv文件,所在的文档目录不同得根据自己文档的地址来调整
reader = csv.DictReader(open('./demo1/2018年北京积分落户数据1.csv', encoding='utf-8'))
# 转换成列表
reader = list(reader)
# 同样写抬头
writer = csv.DictWriter(open('./demo1/狮子座.csv', 'w', encoding='utf-8', newline=''), reader[1].keys())
writer.writeheader()
# 遍历刚刚写好带日期的csv文件,所在的文档目录不同得根据自己文档的地址来调整
for x in reader:
    # 用字符串切割比如: 1992-04-08 -> ['1992', '04', '08']
    birthday = x['birthday'].split('-')
    # 判断是否是7月份
    if birthday[1] == '07':
        # 判断日期是否大于23
        if int(birthday[-1]) >= 23:
            # 是的话就写入狮子座的csv文档内
            writer = csv.DictWriter(open('./demo1/狮子座.csv', 'a', encoding='utf-8', newline=''), x.keys())
            writer.writerow(x)
    # 判断是否是8月份
    elif birthday[1] == '08':
        # 判断日期是否小于22
        if int(birthday[-1]) <= 22:
            # 条件成立的话写入狮子座的csv文档内
            writer = csv.DictWriter(open('./demo1/狮子座.csv', 'a', encoding='utf-8', newline=''), x.keys())
            writer.writerow(x)
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值