1、合并文件
# 读取前五天的销售数据,汇总到一个文件中
import csv
filenames = ['2019-12-%02d-销售数据.csv' % (i+1) for i in range(5)]
with open('12月销售数据汇总.csv', 'w', newline='') as file:
csv_writer = csv.writer(file)
for filename in filenames:
with open(filename, newline='') as file:
csv_reader = csv.reader(file)
# 如果当前文件名是第一个文件名时,直接写入;否则将其转换成列表并用分片去掉第一行数据,再进行写入
if filename == filenames[0]: # 第一个文件保留表头
rows = csv_reader
else:
rows = list(csv_reader)[1:] # 转换成列表
csv_writer.writerows(rows)
可以使用 list() 函数
转换成列表
%02d
中 2表示最小占位符宽度,前面的0表示用0填充宽度不足的部分,如1 >> 01, 2 >> 02。
2、统计数据
# 读取 12月销售数据汇总.csv 并计算出购买转化率(买家数/访客数)和客单价(交易额/买家数)存入新的表格当中
import csv
with open('12月销售计算数据汇总.csv', 'w', newline='') as file:
csv_writer = csv.writer(file)
with open('12月销售数据汇总.csv', newline='') as file:
csv_reader = csv.reader(file)
for index, row in enumerate(csv_reader):
if index == 0: # 第一个是表头
csv_writer.writerow(row + ['购买转化率', '客单价']) # 添加两个新表头
else:
visitors = int(row[2]) # 访客量
buyers = int(row[3]) # 买家数
gmv = int(row[4]) # 交易额
sale_rate = buyers / visitors if visitors else 0 # 购买转化率,除数不为 0 时进行计算,否则结果为 0
pct = gmv / buyers if buyers else 0 # 客单价
csv_writer.writerow(row + [sale_rate, pct]) # 添加购买转化率和客单价
enumerate() 函数
获取索引和每行数据内容,当索引是 0 时表示是第一行数据,即为表头,剩下的就是表格数据。
row的值是一个列表,通过索引就能获取到对应的值,获取的数据是字符串格式,需要用 int() 函数
进行转换。
三元表达式
:A / Y if X else Z;只有当X为真,Python才会执行表达式Y,而只有当X为假,才会执行表达式Z。
3、发送邮件
yagmail
是第三方模块,用来发邮件的;是 Yet Another GMAIL/SMTP client 的缩写,意思是“另一个 GMAIL / SMTP 客户端”。
安装:pip install yagmail
SMTP是Simple Mail Transfer Protocol 的缩进,即简单邮件传输协议。yagmail.SMTP()
用于和邮箱服务器建立连接,需要传入发件人邮箱、授权码和邮箱服务器地址。
调用 yag.send()
方法发送邮件,参数 to 是收件人邮箱,接收的是一个列表,可以传入多个收件人邮箱;参数 subject 是邮件的主题;最后的参数 contents 则是邮件内容,contents非常的智能,可以接收一个列表,传入一个文件,该文件会作为附件发送(这个文件 不存在,会作为文本直接显示)。
import yagmail
yag = yagmail.SMTP(user='...@qq.com', password='...', host='smtp.qq.com')
yag.send(to=['...@qq.com'], subject='Python 发送邮件', contents='人生苦短,我用 Python')
import yagmail
user = '...@qq.com' # 发件人邮箱
password = '...' # 授权码
host = 'smtp.qq.com' # smtp服务器地址
to = ['...@qq.com'] # 收件人邮箱
subject = '...数据汇总' # 邮件主题
contents = ['统计了 ... 数据,请查收~', '...数据汇总.csv'] # 邮件正文
yag = yagmail.SMTP(user=user, password=password, host=host)
yag.send(to=to, subject=subject, contents=contents)