Python 数据mapping,缺失日期mapping不上自动跳一行

利用Python做自动化表报时遇到以下情况:

根据需求从数据库中输出数据写到Excel中,并对输出数据进行mapping,如果有缺失数据导致mapping不上的情况,在缺失的那一行自动空行,接着在空行后写入。

如A和B的数据均为mysql 输出数据,如果B缺失日期,则A对应的B为空,在下一行接着写入数据

AB 
data_datetotal_countdata_datetotal_countdata_date_mapping
2018-07-0244682018-07-024458相同
2018-07-0945612018-07-094549相同
2018-07-1645302018-07-164517相同
2018-07-2344972018-07-234487相同
2018-07-3044162018-07-304407相同
2018-08-0644392018-08-064432相同
2018-08-1344942018-08-134487相同
2018-08-2746032018-08-274596相同
2018-09-0344652018-09-034457相同

 

思路如下:

1.以A的数据为标准,B的数据为变量

2.因元组不能添加元素,因此先把元组转换为list

3.判断,如果B的时间在A中不存在,就插入一个元素,list.insert()

代码如下:

#! /usr/bin/env python
# -*- coding:utf-8 -*-
import MySQLdb
from openpyxl import load_workbook
import sys
import time
import os

reload(sys)
sys.setdefaultencoding('utf8')

db = MySQLdb.connect(host="localhost", user="zimu", passwd="zimu", db="database", port=3306, charset='utf8')
template_file = r"D:\tmepalte_path\template.xlsx"
output_path = r"D:\output_path\\"
if not os.path.exists(output_path):
    os.mkdir(output_path)
book = load_workbook(template_file)
sheet = book['Sheet1']
B_data_list = []

A_sql = '''select '''
B_sql = '''select'''

# 处理A数据
cursor = db.cursor()
cursor.execute(A_sql)
A_data = cursor.fetchall()
t=0
while t<len(A_data):
    for x in range (0,2):
        sheet.cell(t + 3, x + 1).value = A_data[t][x]
    t += 1

# 处理B 数据
cursor.execute(B_sql)
B_data = cursor.fetchall()
B_data_list = list(B_data)

t=0
while t<len(B_data_list):
    if A_data[t][0] != B_data_list[t][0]:
        B_data_list.insert(t,('',''))
    for x in range(0, 2):
        sheet.cell(t + 3, x + 3).value = B_data_list[t][x]
    t += 1

#处理mapping
for i in range(3,sheet.max_row+1):
    if sheet.cell(i,1).value == sheet.cell(i,3).value:
        sheet.cell(i, 5).value = '相同'
    else:
        sheet.cell(i, 5).value = '不同'
book.save(output_path + "tmfs inv mapping_" + time.strftime("%Y%m%d", time.localtime())+ "_" + str(int(time.time())) +".xlsx")


 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值