IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> 大数据 -> python示例--下载mysql数据库中数据--excel表格,合并表格 -> 正文阅读

[大数据]python示例--下载mysql数据库中数据--excel表格,合并表格

用到的知识点

1.mysql连接

2.pandas的concat数据合并

3.路径等


import threading
import requests
import json
import pymysql
from openpyxl import load_workbook
import openpyxl
import os
from configparser import ConfigParser
import time
import sys
import pandas as pd


# __file__  #表示文件的名字
# os.path.abspath(__file__)  #绝对路径
#软件运行的所在文件夹目录--根目录
BASEDIR=os.path.dirname(os.path.abspath(__file__))
pathfile=os.path.join(BASEDIR,'config','config.ini')
# print(pathfile)

def inputdata():


    # stringss=input("请输入数据格式:'pvm ip:行政区划代码,189.1.1.1:610403,...':").strip()
    stringss=input("请输入数据格式:'ipaddress:行政区划代码,...':").strip()
    items=stringss.split(',')
    # print(items,type(items))
    pcaddress=['161.20.12.156','161.20.12.112','181.172.11.119','181.172.11.11']
    for cityitem in items:
        ip,citycode=cityitem.split(":")
        #排除一些ip地址
        # if ip=='161.20.12.156'' or ip=='161.20.12.15'' or ip=='181.172.11.11':
        if ip in pcaddress:
            print("IP地址输入问题")
            sys.exit()

        
        if not citycode.startswith('112504'):
            print("行政区划范围输入问题")
            sys.exit()

        #启用多线程进行数据下载工作
        th=threading.Thread(target=calldownloadcity,args=(ip,citycode))
        th.start()
        # print(ip,citycode)
        # calldownloadcity(ip,citycode)


def calldownloadcity(ip,citycodearg):
    citycode = citycodearg
    cityaddress = ip

    try:
        db = pymysql.connect(host=cityaddress, user="root", passwd="123456", db="dbss")
    except:
        print(cityaddress,"连接平台失败,请检查网络!")
        time.sleep(2)
        return


    downloadCity(citycode,db)

# 下载每个地市的文件,采用sql语句+excel表格的方式
def downloadCity(citycode,db):

    # 这里字符串的解决一定要注意的
    # sqlcity = "select * from device WHERE gb_id like %s%%"%(citycode)
    sqlcity = "select * from device WHERE gb_id like '{}%%'".format(citycode)
    # print(sqlcity)
    cursor = db.cursor()
    cursor.execute(sqlcity)

    wb = openpyxl.Workbook()
    wbsheet = wb.create_sheet("结果")
    print(citycode,"数据写入文件中,请稍等....")
    result = cursor.fetchall()
    # print(result)
    for rowdata in result:
        wbsheet.append(rowdata)  # 写入excel表格
        # print(rowdata)
    xlsxname ="{}.xlsx".format(citycode)
    wb.save(xlsxname)  # 保存的excel表格

    cursor.close()  # 关闭游标
    db.close()  # 关闭数据库
    print(xlsxname,"数据写入完成,请到软件目录下获取excel文件")


def fludb():
    pass

#合并所有excel表格



#合并表格数据是以 191开头 以xlsx结尾的excel表格信息
def concatex():
    # print(pathfile)

    filesnames=os.listdir(os.getcwd())   #获取当前目录下所有文件
    writername=pd.ExcelWriter(r'ALL合成信息表.xlsx')   #最终保存文件的名称--最终合成的xlsx文件
    excel_files=[]   #接入符合要求的excel表格名称
    for filename in filesnames:
        if os.path.splitext(filename)[1]=='.xlsx' and filename.startswith('191'):    #后缀以'.xlsx'结尾,同时与‘191’开头的文件放入列表
            excel_files.append(filename)
    print("合并表格正在进行中,请稍后....:")
    print(excel_files)

    mergedflists=[]    #存放读取的表格的内容,临时缓冲区作用

    for excelname in excel_files:
        excel_content=pd.read_excel(excelname,sheet_name='结果',header=None)   #读取每个表格的sheet表为‘结果’的表格信息到列表中
        mergedflists.append(excel_content)


    ####数据保存=#############
    pd.concat(mergedflists).to_excel(writername,sheet_name='All合成表信息',index=False)
    writername.save()   #保存信息




def tuichu():
    sys.exit()


func_dic = {
    '1' :inputdata,
    '2' :concatex,
    '3' :tuichu,


}

if __name__ == '__main__':


    while True:
        print('''
          
            ===========功能列表===========
            1.下载图像资料信息
            2.合并当前目录下191**开头的所有excel表格-->'ALL合成信息表.xlsx'
            3.退出

           
             ''')
        choice = input('请输入功能编号:').strip()
        if choice not in func_dic:
            print("输入正确的编号:")
            continue

        func_dic.get(choice)()
        # print("本次录入数据条目是{}:条".format(jc))





  大数据 最新文章
实现Kafka至少消费一次
亚马逊云科技:还在苦于ETL?Zero ETL的时代
初探MapReduce
【SpringBoot框架篇】32.基于注解+redis实现
Elasticsearch:如何减少 Elasticsearch 集
Go redis操作
Redis面试题
专题五 Redis高并发场景
基于GBase8s和Calcite的多数据源查询
Redis——底层数据结构原理
上一篇文章      下一篇文章      查看所有文章
加:2022-05-19 11:58:28  更:2022-05-19 11:59:19 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 -2024/11/23 20:39:00-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码