继承json和csv文件操作作业

作业1:

将酒店数据按照地区分类放入每个地区对应的csv文件中:

import csv

# 1). 读取文件
reader = csv.DictReader(open('files/北京高档酒店价格分析.csv', encoding='utf-8', newline=''))
# print(list(reader))
# 2). 获取键
keys = list(list(reader)[0].keys())
# print(keys)

# 3).遍历到每一个数据(字典),判断是哪个区,然后写入对应的文件中
reader = csv.DictReader(open('files/北京高档酒店价格分析.csv', encoding='utf-8', newline=''))
for x in list(reader):
    print(x)
    if x['地区'] == '朝阳区':
        writer = csv.DictWriter(open('files/朝阳区.csv', 'a', encoding='utf-8', newline=''), keys)
        # 判断是第一个就写入头部数据
        reader1 = csv.reader(open('files/朝阳区.csv', encoding='utf-8', newline=""))
        if not [x for x in reader1]:
            writer.writeheader()
        else:
            writer.writerow(x)

    elif x['地区'] == '东城区':
        writer = csv.DictWriter(open('files/东城区.csv', 'a', encoding='utf-8', newline=''), keys)
        reader2 = csv.reader(open('files/东城区.csv', encoding='utf-8',newline=''))
        if not [x for x in reader2]:
            writer.writeheader()
        else:
            writer.writerow(x)

    elif x['地区'] == '海淀区':
        writer = csv.DictWriter(open('files/海淀区.csv', 'a', encoding='utf-8', newline=''), keys)
        reader3 = csv.reader(open('files/海淀区.csv', encoding='utf-8', newline=""))
        if not [x for x in reader3]:
            writer.writeheader()
        else:
            writer.writerow(x)
    else:
        writer = csv.DictWriter(open('files/其他城区.csv', 'a', encoding='utf-8', newline=''), keys)
        reader4 = csv.reader(open('files/其他城区.csv', encoding='utf-8', newline=""))
        if not [x for x in reader4]:
            writer.writeheader()
        else:
            writer.writerow(x)

作业2:

# 作业2:
# 基于落户积分文件:
# 1)计入所有人的平均年龄
# 1.读文件
from  time import  *
from datetime import  *

reader = csv.DictReader(open('files/2018年北京积分落户数据 (1).csv', encoding='utf-8', newline=''))
age = [(2022 - eval(x['birthday'][:4])) for x in reader]
print(f'平均年龄:{sum(age) // len(age)}岁')


# 2)修改每个人的生日,随机添加日(1-28);或判断月份添加
# 第一种,是普通闰年,能被4整除但不能被100整除(如2008年就是普通闰年);
# 第二种,比较少见的,世纪闰年:能被400整除(如2000年是世纪闰年,1900年不是世纪闰年)

import random
reader = csv.DictReader(open('files/2018年北京积分落户数据 (1).csv', encoding='utf-8', newline=''))
keys = list(list(reader)[0])
# print(keys)
write = csv.DictWriter(open('files/2018年北京积分落户数据 (修改).csv', 'w', encoding='utf-8', newline=''),keys)
write.writeheader()
# print(list(reader))

reader = csv.DictReader(open('files/2018年北京积分落户数据 (1).csv', encoding='utf-8', newline=''))
for x in reader:
    year = eval(x['birthday'][:4])
    month = x['birthday'][5:7]
    # print(month)
    if month in ('01', '03', '05', '07', '08', '10', '12'):
        day = str(random.randint(1, 31))
        x['birthday'] = x['birthday'] + '-' + day.rjust(2,'0')
        write.writerow(x)

    elif month in ('04', '06', '09', '11'):
        day = str(random.randint(1, 30))
        x['birthday'] = x['birthday'] + '-' + day.rjust(2,'0')
        write.writerow(x)

    # 如果是二月份分平闰年讨论
    else:
        # 如果是闰年
        if (year % 4 == 0 and year % 100 != 0) or year % 400 == 0:
            day = str(random.randint(1, 29))
            x['birthday'] = x['birthday'] + '-' + day.rjust(2,'0')
            write.writerow(x)

        else:
            day = str(random.randint(1, 28))
            x['birthday'] = x['birthday'] + '-' + day.rjust(2,'0')
            write.writerow(x)



# 3)将所有狮子座的人对应的数据放入到一个单独的csv文件中
# 狮子座的日期: 7月23日-8月22日
reader = csv.DictReader(open('files/2018年北京积分落户数据 (修改).csv', encoding='utf-8', newline=''))
write = csv.DictWriter(open('files/狮子座.csv', 'w', encoding='utf-8', newline=''), keys)
write.writeheader()
for x in reader:
    mothon_day = x['birthday'][5:]
    # print(mothon_day)
    day1 = mothon_day[3:]
    if mothon_day[:2] == '07':
        if day1[0] == '0':
            day1 = day1[-1]

        if eval(day1) >= 23:
            write.writerow(x)

    elif mothon_day[:2] == '08':
        day1 = mothon_day[3:]
        if day1[0] == '0':
            day1 = day1[-1]

        if eval(day1) <= 22:
            write.writerow(x)
  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值