用到的知识点
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))
|