目录
1 标准注释
2 与linux交互
3 连接MySQL等数据库
4 Tkinter基础框架
5 常用IO读写
6 SQL查询结果excel导出
7 调用windows程序
8 ping网络
9 图形化统计分析
10 匿名函数&不定量元素输入
11 pandas常用方法
12 PyQt多个日历时间模块加载与选择时间获取
13 for循环多个变量(zip)
14 爬虫,王者荣耀皮肤爬取
15 python依据文件内容改文件名
16 时间的转换与计算
1 标准注释
#!/usr/bin/env python # -*- encoding: utf-8 -*- """ @File : Basic010.py @Contact : dtboys***@163.com @License : (C)Copyright 1997-2020, XXXXXXXXXXXXX CO.,LTD. @Modify Time @Author @Version @Desciption ------------ ------- -------- ----------- 2020/7/3 11:32 liqb 1.0 kill some bugs """
2 与linux交互
import paramiko # 创建SSHClient实例对象 ssh = paramiko.SSHClient() # 调用方法,标识没有远程机器的公钥,允许访问 ssh.set_missing_host_key_policy(paramiko.AutoAddPolicy()) # 连接远程机器 地址端口用户名密码 ssh.connect("xx.xx.xx.xx",22,"root","xxxxx") # 执行命令 #ssh.exec_command('echo $?') stdin,stdout,stderr = ssh.exec_command('date +"%Y%m%d"') print(stdout.read().decode("utf-8")) ssh.close()
3 连接MySQL等数据库
- 其他数据库格式与之一样,import包不同而已,比如sqlserver是pymssql
from pymysql import connect def exeSqlRes(server,user,password,database,sql): conn = connect(server,user,password,database) cursor = conn.cursor() cursor.execute(sql) list1 = cursor.fetchall() # get count try: print("业务日期 :%s\n收费总金额:%s\n" % (list1[0][0],list1[0][1])) except: print("日期选择错误,请确认该天有数据\n") conn.close() exeSqlRes('xx.xx.xx.xx','xx','xx','xxx','select now()')
4 Tkinter基础框架
from tkinter import * import tkinter.font as tf def btn_click(): text.insert(INSERT,("输入错误,请确定输入值!\n")) def specialType(): # 调整字体高亮 ft = tf.Font(family='微软雅黑',size=10) text.tag_config('tag',foreground = 'blue',background='pink',font = ft) text.insert(INSERT,"您选择的是特情码字典,查询结果如下:\n",'tag') # enter调用 def btn_click_enter(self): btn_click() # 清空消息 def cleartext(): text.delete('0.0', END) # 创建窗口对象的背景色 root = Tk() root.title('便捷式一键查询服务系统') root.geometry('960x700') # Frame为布局函数 main_frame = Frame(root) text_frame = Frame(main_frame) station_frame = Frame(main_frame) botton_frame = Frame(station_frame) # 建立列表 l1 = Label(station_frame,text='输入门架,站码,IP,互通,厂商或相关拼音') #l2 = Label(station_frame,text='') ipText=Entry(station_frame) # 字体显示 # ft = tkFont.Font(family='Fixdsys', size=10, weight=tkFont.BOLD) # pack是加载到窗口 l1.pack(side='left') ipText.pack(side='left') ipText['width']=24 #l2.pack(side='left') ''' 两个函数的意义是既能enter运行,又可以点击运行,方便操作,扩大使用 bind绑定enter键 注意里面是return 而不是enter ''' b = Button(station_frame,text='查询',command=btn_click) b['width']=4 b['height']=1 b.pack(side='left') ipText.bind("
", btn_click_enter) # 消息输入界面 text = Text(text_frame,width = 130, height= 39) text.pack() main_frame.pack() c = Button(text='清空',command=cleartext) c['width']=4 c['height']=1 c.pack(side='left') # 第二个函数 d = Button(text='导出excel',command=excelExport) d['width']=8 d['height']=1 d.pack(side='top') # 输入框的位置 station_frame.pack(side='top',pady='10') text_frame.pack() # 进入消息循环 root.mainloop()
5 常用IO读写
- 5.1 文本写入
# 这个与简单的io open close的区别是后者是在内存里边写边存的,必须要close文件,否则可能容易造成数据丢失 # r 是只读,文件不存在报错,r+是读写 # w 是只写,覆盖,文件不存在会创建,w+是读写 # a 是只写,追加,文件不存在会创建,a+是读写 import codecs with codecs.open(file,'a+',encoding='utf-8') as f: f.write(df.ip[i]+','+station+','+df.big[i]+','+df.small[i]+','+'正常联网'+'\n')
- 5.2 读取字典到文件
import codecs import json file1 = "D:\\result\\result%s.csv" % date1 # r是读,w是覆盖,a是追加,后面跟个+是文件不存在就创建,如果还包括路径,则需要os包来创建 # 读取字典 file = open(file1, 'r') ''' import os dirs = '/Users/joseph/work/python/' if not os.path.exists(dirs): os.makedirs(dirs) ''' js = file.read() dict_num = json.loads(js) # 字典写入文件 with codecs.open(file_i,'w',encoding='utf-8') as f: json.dump(dict_num,f)
6 SQL查询结果excel导出
import xlwt import os def excelExport(): path1 = os.getcwd() excel_file = '%s\\门架基础信息数据表' % (path1) #判断文件是否存在 if os.path.exists(excel_file): os.remove(excel_file) else: pass wb = xlwt.Workbook(encoding='utf-8') # 创建sheet,覆盖 ws = wb.add_sheet('门架基础信息筛选表') # 行数 row_num = 0 font_style = xlwt.XFStyle() # 二进制 font_style.font.bold = True # 表头内容 columns = ['互通1','互通2','门架','工控机IP','站名','服务器IP','方向','属性','flag1','vplr','rsu','管理处','桩号'] # 写进表头内容 for col_num in range(len(columns)): ws.write(row_num, col_num, columns[col_num], font_style) font_style = xlwt.XFStyle() # 将列名加粗后重新设置 # list1是与columns同等长度的二维列表,可以是sql的查询结果,也可以是自身apeend for row in list1: row = ['' if i == 'nan' else i for i in row] # 如果某项为nan则设置为空 row_num += 1 # 逐行写入Excel for col_num in range(len(row)): ws.write(row_num, col_num, row[col_num], font_style) wb.save(r'%s.xls' % excel_file) list1.clear()
7 调用windows程序
import os as os import codecs class EasyStation: # 读取站名,类型强转 num1 = int(input("请输入数字站码: ")) dict1 = {1111:['test1','xx.xx.xx.xx'],1113:['test2','xx.xx.xx.xx']} # 对错误站名做异常处理 try: servername = dict1[num1][0] dbip = dict1[num1][1] file1 = "foo.txt" if os.path.exists(file1): print ("file have been existed , del firstly") os.remove(file1) else: with codecs.open(file1,'w',encoding='utf-8') as f: f.write(u"[serverinfo]\nserverNum=1\nnum1=" + str(num1) + "\n" + "[") # 启动 def open_app(app_dir): os.startfile(app_dir) if __name__ == "__main__": app_dir = r'D:\Program Files (x86)\Youdao\YoudaoNote\YoudaoNote.exe' open_app(app_dir) except KeyError: print ("Error:未找到该站名,请查证")
8 ping网络
import re import subprocess def run(str_ip): ftp_ret = subprocess.Popen('ping %s -n 3' % str_ip,stdin=subprocess.PIPE,stdout=subprocess.PIPE,shell=True) ret = ftp_ret.stdout.read() # 这里的字符集一定是gbk,否则会报错 str_ret = ret.decode("gbk") ret_s = re.search("TTL",str_ret) if ret_s: print('net succ!') else: print('net error!') run('www.baidu.com')
9 图形化统计分析
import numpy as np import matplotlib as mpl import matplotlib.pyplot as plt from pylab import * mpl.rcParams['font.sans-serif'] = ['SimHei'] mpl.rcParams['axes.unicode_minus'] = False # 导入数据 sj=['00','01','02','03','04','05','06','18','19','20','21','22','23'] #sj = filter(lambda x:x%200 == 0, zl) sp1 = [103.00,102.50,104.50,104.00,105.00,104.00,107.50,101.00,100.00,102.00,100.50,103.50,104.50] sp2 = [105.11,105.89,106.22,105.11,105.00,105.78,105.11,95.44,95.56,97.11,101.00,102.00,103.44] #开始画图 plt.title('醒目工程安装前后对比图') plt.plot(sj, sp1, color='red', label='安装前1车道车速') plt.plot(sj, sp2, color='green', label='安装后1车道车速') plt.legend() # 显示图例 plt.xlabel('小时') plt.ylabel('车速') #plt.savefig("temp1.jpg") plt.show()
10 匿名函数&不定量元素输入
def test(a,*b): print(a,end = ' ') for i in b: func = lambda i : i * 2 print(func(i),end = ' ') test(1,2,3,4,5,6,7)
11 pandas常用方法
pandas传送门,是的我在推销我自己
12 PyQt多个日历时间模块加载与选择时间获取
import sys from PyQt5.QtCore import QDate,QDateTime,QTime from PyQt5.QtWidgets import * from PyQt5.QtGui import * import time class DateTimeEditDemo(QWidget): def __init__(self): super(DateTimeEditDemo, self).__init__() self.initUI() def initUI(self): #设置标题与初始大小 self.setWindowTitle('镇海危化品车查询') self.resize(500,380) #垂直布局/水平布局 QVBoxLayout/QHBoxLayout layout=QVBoxLayout() self.setLayout(layout) #创建第一个日期时间空间,并把当前日期时间赋值,并修改显示格式 self.label1 = QLabel('开始时间') self.dateEdit1=QDateTimeEdit(QDateTime.currentDateTime(),self) self.dateEdit1.setDisplayFormat('yyyy-MM-dd HH:mm:ss') #设置第一个日期最大值与最小值,在当前日期的基础上,后一年与前一年 self.dateEdit1.setMinimumDate(QDate.currentDate().addDays(-365)) self.dateEdit1.setMaximumDate(QDate.currentDate().addDays(365)) #设置第一个日历控件允许弹出 self.dateEdit1.setCalendarPopup(True) self.label2 = QLabel('结束时间') #创建第二个日期时间空间,并把当前日期时间赋值,。并修改显示格式 self.dateEdit2=QDateTimeEdit(QDateTime.currentDateTime(),self) self.dateEdit2.setDisplayFormat('yyyy-MM-dd HH:mm:ss') #设置第二个日期最大值与最小值,在当前日期的基础上,后一年与前一年 self.dateEdit2.setMinimumDate(QDate.currentDate().addDays(-365)) self.dateEdit2.setMaximumDate(QDate.currentDate().addDays(365)) #设置第二个日历控件允许弹出 self.dateEdit2.setCalendarPopup(True) #创建按钮并绑定一个自定义槽函数 self.btn=QPushButton('点击查询') self.btn.clicked.connect(self.onButtonClick) #创建文本框用于显示想要输出的内容 self.textEdit = QTextEdit() #布局控件的加载与设置,可加载多个控件 layout.addWidget(self.label1) layout.addWidget(self.dateEdit1) layout.addWidget(self.label2) layout.addWidget(self.dateEdit2) layout.addWidget(self.btn) layout.addWidget(self.textEdit) def onButtonClick(self): #dateTime是QDateTimeEdit的一个方法,返回QDateTime时间格式 #需要再用toPyDateTime转变回python的时间格式 dateTime1=str(self.dateEdit1.dateTime().toPyDateTime())[0:19] dateTime2=str(self.dateEdit2.dateTime().toPyDateTime())[0:19] #python时间格式转换 n_time11 = time.strptime(dateTime1, "%Y-%m-%d %H:%M:%S") n_time22 = time.strptime(dateTime2, "%Y-%m-%d %H:%M:%S") n_time1 = int(time.strftime('%Y%m%d%H%M%S',n_time11)) n_time2 = int(time.strftime('%Y%m%d%H%M%S',n_time22)) self.textEdit.setText("This is pyqt's test!") #if __name__ == '__main__'的作用是为了防止其他脚本只是调用该类时才开始加载,优化内存使用 if __name__ == '__main__': #调用 app=QApplication(sys.argv) demo=DateTimeEditDemo() demo.show() sys.exit(app.exec_())
13 for循环多个变量(zip)
for i,j,z in zip([1,2,3,4],['test1','test2','test3','test4'],[11,22,33,44]): print(i,j,z)
14 爬虫,王者荣耀皮肤爬取
import os import requests url = 'https://pvp.qq.com/web201605/js/herolist.json' herolist = requests.get(url) # 获取英雄列表json文件 herolist_json = herolist.json() # 转化为json格式 hero_name = list(map(lambda x: x['cname'], herolist.json())) # 提取英雄的名字 hero_number = list(map(lambda x: x['ename'], herolist.json())) # 提取英雄的编号 # 下载图片 def downloadPic(): i = 0 for j in hero_number: # 创建文件夹 os.mkdir("C:\\Users\\dtboy\\Desktop\\downWz\\" + hero_name[i]) # 进入创建好的文件夹 os.chdir("C:\\Users\\dtboy\\Desktop\\downWz\\" + hero_name[i]) i += 1 for k in range(10): # 拼接url onehero_link = 'http://game.gtimg.cn/images/yxzj/img201606/skin/hero-info/' + str(j) + '/' + str(j) + '-bigskin-' + str(k) + '.jpg' im = requests.get(onehero_link) # 请求url if im.status_code == 200: open(str(k) + '.jpg', 'wb').write(im.content) # 写入文件 downloadPic()
15 python依据文件内容改文件名
import os import pandas as pd import time # 获取桌面上的etc文件夹 path = os.path.join(os.path.expanduser('~'),"Desktop") + "\\etc" dirs = os.listdir(path) #遍历文件改名 for file in dirs: file_ = os.path.join(path,file) df = pd.read_excel(file_,header=None) x1 = str(df.iloc[0,0]).replace('明细','') date1 = int(time.strftime('%Y%m%d',time.strptime(x1[-20,-10],'%Y-%m-%d'))) nname = file.split('-')[0] + '_' + str(date1) + '.xls' os.rename(path+"\\"+file,path+"\\"_nname) print('succ!')
本demo依据实际场景改名,详情点击博客这是一个小链接查看背景与脚本介绍
16 时间的转换与计算
单独一章,见链接:https://blog.csdn.net/mochou111/article/details/107783146