1. <strong id="7actg"></strong>
    2. <table id="7actg"></table>

    3. <address id="7actg"></address>
      <address id="7actg"></address>
      1. <object id="7actg"><tt id="7actg"></tt></object>

        5個有趣的Python腳本

        共 9303字,需瀏覽 19分鐘

         ·

        2022-10-15 13:44

        Python可以玩的方向有很多,比如爬蟲、預測分析、GUI、自動化、圖像處理、可視化等等,可能只需要十幾行代碼就能實現(xiàn)酷炫的功能。

        因為Python是動態(tài)腳本語言,所以代碼邏輯比Java要簡要很多,實現(xiàn)同樣的功能少寫很多代碼。而且Python生態(tài)有眾多的第三方工具庫,把功能都封裝在包里,只需要你調用接口,就能使用復雜的功能。

        下面舉幾個簡單好玩的腳本例子,初學者可以照著代碼寫寫,能快速掌握python語法。

        1、使用PIL、Matplotlib、Numpy對模糊老照片進行修復

        # encoding=utf-8
        import numpy as np
        import matplotlib.pyplot as plt
        from PIL import Image
        import os.path
        # 讀取圖片
        img_path = "E:\\test.jpg"
        img = Image.open(img_path)

        # 圖像轉化為numpy數(shù)組
        img = np.asarray(img)
        flat = img.flatten()

        # 創(chuàng)建函數(shù)
        def get_histogram(image, bins):
            # array with size of bins, set to zeros
            histogram = np.zeros(bins)
            # loop through pixels and sum up counts of pixels
            for pixel in image:
                histogram[pixel] += 1
            # return our final result
            return histogram

        # execute our histogram function
        hist = get_histogram(flat, 256)

        # execute the fn
        cs = np.cumsum(hist)

        # numerator & denomenator
        nj = (cs - cs.min()) * 255
        N = cs.max() - cs.min()

        # re-normalize the cumsum
        cs = nj / N

        # cast it back to uint8 since we can't use floating point values in images
        cs = cs.astype('uint8')

        # get the value from cumulative sum for every index in flat, and set that as img_new
        img_new = cs[flat]

        # put array back into original shape since we flattened it
        img_new = np.reshape(img_new, img.shape)

        # set up side-by-side image display
        fig = plt.figure()
        fig.set_figheight(15)
        fig.set_figwidth(15)

        # display the real image
        fig.add_subplot(121)
        plt.imshow(img, cmap='gray')
        plt.title("Image 'Before' Contrast Adjustment")

        # display the new image
        fig.add_subplot(122)
        plt.imshow(img_new, cmap='gray')
        plt.title("Image 'After' Contrast Adjustment")
        filename = os.path.basename(img_path)

        # plt.savefig("E:\\" + filename)
        plt.show()

        2、將文件批量壓縮,使用zipfile庫

        import os
        import zipfile
        from random import randrange


        def zip_dir(path, zip_handler):
            for root, dirs, files in os.walk(path):
                for file in files:
                    zip_handler.write(os.path.join(root, file))


        if __name__ == '__main__':
            to_zip = input("""
        Enter the name of the folder you want to zip
        (N.B.: The folder name should not contain blank spaces)
        >
        """
        )
            to_zip = to_zip.strip() + "/"
            zip_file_name = f'zip{randrange(0,10000)}.zip'
            zip_file = zipfile.ZipFile(zip_file_name, 'w', zipfile.ZIP_DEFLATED)
            zip_dir(to_zip, zip_file)
            zip_file.close()
            print(f'File Saved as {zip_file_name}')

        3、使用tkinter制作計算器GUI

        tkinter是python自帶的GUI庫,適合初學者練手創(chuàng)建小軟件

        import tkinter as tk

        root = tk.Tk()  # Main box window
        root.title("Standard Calculator")  # Title shown at the title bar
        root.resizable(00)  # disabling the resizeing of the window

        # Creating an entry field:
        e = tk.Entry(root,
                     width=35,
                     bg='#f0ffff',
                     fg='black',
                     borderwidth=5,
                     justify='right',
                     font='Calibri 15')
        e.grid(row=0, column=0, columnspan=3, padx=12, pady=12)


        def buttonClick(num):  # function for clicking
            temp = e.get(
            )  # temporary varibale to store the current input in the screen
            e.delete(0, tk.END)  # clearing the screen from index 0 to END
            e.insert(0, temp + num)  # inserting the incoming number input


        def buttonClear():  # function for clearing
            e.delete(0, tk.END)

        # 代碼過長,部分略

        4、PDF轉換為Word文件

        使用pdf2docx庫,可以將PDF文件轉為Word格式

        from pdf2docx import Converter
        import os 
        import sys

        # Take PDF's path as input 
        pdf = input("Enter the path to your file: ")
        assert os.path.exists(pdf), "File not found at, "+str(pdf)
        f = open(pdf,'r+')

        #Ask for custom name for the word doc
        doc_name_choice = input("Do you want to give a custom name to your file ?(Y/N)")

        if(doc_name_choice == 'Y' or doc_name_choice == 'y'):
            # User input
            doc_name = input("Enter the custom name : ")+".docx"
            
        else:
            # Use the same name as pdf
            # Get the file name from the path provided by the user
            pdf_name = os.path.basename(pdf)
            # Get the name without the extension .pdf
            doc_name =  os.path.splitext(pdf_name)[0] + ".docx"

            
        # Convert PDF to Word
        cv = Converter(pdf)

        #Path to the directory
        path = os.path.dirname(pdf)

        cv.convert(os.path.join(path, "", doc_name) , start=0, end=None)
        print("Word doc created!")
        cv.close()

        5、Python自動發(fā)送郵件

        使用smtplib和email庫可以實現(xiàn)腳本發(fā)送郵件

        import smtplib
        import email
        # 負責構造文本
        from email.mime.text import MIMEText
        # 負責構造圖片
        from email.mime.image import MIMEImage
        # 負責將多個對象集合起來
        from email.mime.multipart import MIMEMultipart
        from email.header import Header

        # SMTP服務器,這里使用163郵箱
        mail_host = "smtp.163.com"
        # 發(fā)件人郵箱
        mail_sender = "******@163.com"
        # 郵箱授權碼,注意這里不是郵箱密碼,如何獲取郵箱授權碼,請看本文最后教程
        mail_license = "********"
        # 收件人郵箱,可以為多個收件人
        mail_receivers = ["******@qq.com","******@outlook.com"]

        mm = MIMEMultipart('related')

        # 郵件主題
        subject_content = """Python郵件測試"""
        # 設置發(fā)送者,注意嚴格遵守格式,里面郵箱為發(fā)件人郵箱
        mm["From"] = "sender_name<******@163.com>"
        # 設置接受者,注意嚴格遵守格式,里面郵箱為接受者郵箱
        mm["To"] = "receiver_1_name<******@qq.com>,receiver_2_name<******@outlook.com>"
        # 設置郵件主題
        mm["Subject"] = Header(subject_content,'utf-8')

        # 郵件正文內(nèi)容
        body_content = """你好,這是一個測試郵件!"""
        # 構造文本,參數(shù)1:正文內(nèi)容,參數(shù)2:文本格式,參數(shù)3:編碼方式
        message_text = MIMEText(body_content,"plain","utf-8")
        # 向MIMEMultipart對象中添加文本對象
        mm.attach(message_text)

        # 二進制讀取圖片
        image_data = open('a.jpg','rb')
        # 設置讀取獲取的二進制數(shù)據(jù)
        message_image = MIMEImage(image_data.read())
        # 關閉剛才打開的文件
        image_data.close()
        # 添加圖片文件到郵件信息當中去
        mm.attach(message_image)

        # 構造附件
        atta = MIMEText(open('sample.xlsx''rb').read(), 'base64''utf-8')
        # 設置附件信息
        atta["Content-Disposition"] = 'attachment; filename="sample.xlsx"'
        # 添加附件到郵件信息當中去
        mm.attach(atta)

        # 創(chuàng)建SMTP對象
        stp = smtplib.SMTP()
        # 設置發(fā)件人郵箱的域名和端口,端口地址為25
        stp.connect(mail_host, 25)  
        # set_debuglevel(1)可以打印出和SMTP服務器交互的所有信息
        stp.set_debuglevel(1)
        # 登錄郵箱,傳遞參數(shù)1:郵箱地址,參數(shù)2:郵箱授權碼
        stp.login(mail_sender,mail_license)
        # 發(fā)送郵件,傳遞參數(shù)1:發(fā)件人郵箱地址,參數(shù)2:收件人郵箱地址,參數(shù)3:把郵件內(nèi)容格式改為str
        stp.sendmail(mail_sender, mail_receivers, mm.as_string())
        print("郵件發(fā)送成功")
        # 關閉SMTP對象
        stp.quit()

        小結

        Python還有很多好玩的小腳本,你可以根據(jù)自己的場景來編寫,也可以使用現(xiàn)成的第三方庫。

        加入知識星球【我們談論數(shù)據(jù)科學】

        500+小伙伴一起學習!




        瀏覽 91
        點贊
        評論
        收藏
        分享

        手機掃一掃分享

        分享
        舉報
        評論
        圖片
        表情
        推薦
        點贊
        評論
        收藏
        分享

        手機掃一掃分享

        分享
        舉報
        1. <strong id="7actg"></strong>
        2. <table id="7actg"></table>

        3. <address id="7actg"></address>
          <address id="7actg"></address>
          1. <object id="7actg"><tt id="7actg"></tt></object>
            波多野结衣av一区 | 男男激情在线 | 开心成人激情 | 免费无遮挡 网站在线观看 | 免费没广告直接看成人AV | 国色天香久久精品国产一区 | 八重神子COS入夜狂飙的背景故事 逼逼AV | 村妇荒淫史2未删减版在线观看 | 久久久久国产精品免费免费搜索 | 欧美国产成人精品一区二区三区 |