day-18作业(2022.05.08)
1. 作业1:按行政区对酒店进行分类
import os
import csv
original_path = r'./files/北京高档酒店价格分析.csv'
storage_path = r'./task01'
def classification(path,file):
"""
酒店分类
:param path: 储存文件路径
:param file: 原始csv文件
:return:
"""
hotel_data = list(csv.reader(open(file, 'r', encoding='utf-8', newline='')))
for i in hotel_data[1:]:
fi = f'{path}/{i[1]}.csv'
writer = csv.writer(open(fi, 'a', encoding='utf-8', newline=''))
if os.path.getsize(fi):
writer.writerow(i)
else:
writer.writerow(hotel_data[0])
writer.writerow(i)
if __name__ == '__main__':
classification(storage_path,original_path)
2. 作业2:基于落户积分文件
1)添加新生日、年龄、星座
import os
import csv
import random
import re
from datetime import datetime
is_leap_year = lambda year: (year % 4 == 0 and year % 100 != 0) or (year % 400 ==0)
def random_day(path, file):
"""
添加新生日、年龄、星座
:param path: 储存路径
:param file: csv文件
:return:
"""
data = list(csv.DictReader(open(file, 'r', encoding='utf-8', newline='')))
for i in data:
year = int((re.findall(r'(\d{4})-',i['birthday']))[0])
month = int((re.findall(r'-(\d.?)',i['birthday']))[0])
if month in (1,3,5,7,8,10,12):
i['new_birthday'] = str(i['birthday']) + '-' + str(random.randint(1, 31))
elif month in (4,6,9,11):
i['new_birthday'] = str(i['birthday']) + '-' + str(random.randint(1, 30))
else:
if is_leap_year(year):
i['new_birthday'] = str(i['birthday']) + '-' + str(random.randint(1, 29))
else:
i['new_birthday'] = str(i['birthday']) + '-' + str(random.randint(1, 28))
i['new_birthday'] = datetime.strptime(i['new_birthday'],'%Y-%m-%d')
age = datetime.now() - i['new_birthday']
i['age'] = age.days//365
strtime = i['new_birthday'].strftime("%m%d")
if int(strtime) in range(321,420):
i['constellation'] = '白羊座'
elif int(strtime) in range(420,521):
i['constellation'] = '金牛座'
elif int(strtime) in range(521,622):
i['constellation'] = '双子座'
elif int(strtime) in range(622,723):
i['constellation'] = '巨蟹座'
elif int(strtime) in range(723,823):
i['constellation'] = '狮子座'
elif int(strtime) in range(823,923):
i['constellation'] = '处女座'
elif int(strtime) in range(923,1024):
i['constellation'] = '天秤座'
elif int(strtime) in range(1024,1123):
i['constellation'] = '天蝎座'
elif int(strtime) in range(1123,1222):
i['constellation'] = '射手座'
elif int(strtime) in (range(1222,1232) or range(101,120)):
i['constellation'] = '摩羯座'
elif int(strtime) in range(120,219):
i['constellation'] = '水瓶座'
else:
i['constellation'] = '双鱼座'
file = f'{path}/new_birthday.csv'
writer = csv.DictWriter(open(file,'a',encoding='utf-8', newline=''),
list(i))
if os.path.getsize(file):
writer.writerow(i)
else:
writer.writeheader()
writer.writerow(i)
if __name__ == '__main__':
storage_path = r'./task02'
original_path = r'./files/2018年北京积分落户数据.csv'
random_day(storage_path, original_path)
2)计算平均年龄
file1 = r'./task02/new_birthday.csv'
def avg_age(file):
"""
计算平均年龄
:param file: csv文件
:return:
"""
data = list(csv.reader(open(file, 'r', encoding='utf-8',newline='')))
age = [int(i[6]) for i in data[1:]]
return f'{(sum(age) / len(age)):.2f}'
if __name__ == '__main__':
file1 = r'./task02/new_birthday.csv'
print(avg_age(file1))
3)星座分类
file1 = r'./task02/new_birthday.csv'
def constellation(path, file):
"""
星座分类
:param path: 文件保存路径
:param file: 原csv文件
:return:
"""
data = list(csv.reader(open(file, 'r', encoding='utf-8', newline='')))
for i in data[1:]:
fi = f'{path}/{i[len(i)-1]}.csv'
writer = csv.writer(open(fi, 'a', encoding='utf-8', newline=''))
if os.path.getsize(fi):
writer.writerow(i)
else:
writer.writerow(data[0])
writer.writerow(i)
if __name__ == '__main__':
storage_path = r'./task02'
file1 = r'./task02/new_birthday.csv'
constellation(storage_path,file1)