<input id="0qass"><u id="0qass"></u></input>
  • <input id="0qass"><u id="0qass"></u></input>
  • <menu id="0qass"><u id="0qass"></u></menu>

    python常用的模塊開發腳本

    目錄

    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("<Return>", 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 時間的轉換與計算

    單獨一章,見鏈接:http://www.gifted-edu.com/mochou111/article/details/107783146?

    已標記關鍵詞 清除標記
    ??2020 CSDN 皮膚主題: 技術黑板 設計師:CSDN官方博客 返回首頁
    多乐彩