常用Python慣用短涵式區

在寫Python時會有一些常用到的短涵式,例如讀取目前檔案路徑、一個範例視窗...等,很多都是重複性很高但也沒有到需要import,因此這裡會放很多的小範例,也可以根據小範例減少開發的時間成本...

簡述

在寫Python時會有一些常用到的短涵式,例如讀取目前檔案路徑、一個範例視窗…等,很多都是重複性很高但也沒有到需要import,因此這裡會放很多的小範例,也可以根據小範例減少開發的時間成本。

⚠️注意事項⚠️

日後會慢慢更新

正文

讀取目前檔案路徑

可以讀取目前檔案的路徑,並且新增新檔名稱

import os
import sys

# 獲取目前Python檔案所在的路徑
current_path = os.path.dirname(sys.argv[0])
file_path = os.path.join(current_path, 'example.txt')

print("當前文件路徑:", current_path)

⚠️注意事項⚠️

sys.argv[0]是打包檔案時的絕對路徑,os.path.abspath(__file__)是檔案暫存的位置

以上意思是如果程式有打包,寫sys.argv[0]的話是執行檔的路徑,寫os.path.abspath(__file__)的話會是程式執行暫存的位置,如果只是在編輯器上運行,兩者沒差。

跳出警告視窗

有三個警告視窗範例

  • show_warningNoexit(按是之後不會關閉視窗)
  • show_warning(按是之後關閉視窗)
  • ask_confirmation(有兩個選擇,按是關閉視窗,按否沒動作)
import tkinter as tk
from tkinter import messagebox

def show_warningNoexit(str):
    root = tk.Tk()
    root.withdraw()  # 隱藏主窗口

    answer = messagebox.showwarning("警告", str)

    if answer:
         None

def show_warning(str):
    root = tk.Tk()
    root.withdraw()  # 隱藏主窗口

    answer = messagebox.showwarning("警告", str)

    if answer:
         exit()

def ask_confirmation(str):
    root = tk.Tk()
    root.withdraw()  # 隱藏主窗口

    answer = messagebox.askyesno("警告",str)

    if answer:
        None #如果按是要做的動作
        exit()
    else:
        #如果按否要做的動作
        pass

簡易儲存json格式儲存.txt,讀寫範例

簡單的將json格式的資料儲存到.txt,可以配合讀取目前檔案路徑來將.txt儲存到同資料夾

import os
import sys
import json

jsonEmpty = {}
jsonEmpty = str(jsonEmpty)

# 獲取目前Python檔案所在的路徑
current_path = os.path.dirname(sys.argv[0])
jsonData_path = os.path.join(current_path, 'jsonData.txt')
print("當前文件路徑:", current_path)

#初始化json
def checkPathAndRead(path):
    # 檢查檔案是否存在
    if os.path.exists(path):
        # 如果檔案存在,則讀取內容
        with open(path, 'r') as file:
            data = str(file.read())
        return json.loads(data)
    else:
        # 如果檔案不存在,則創建並寫入內容
        with open(path, 'w') as file:
            file.write(jsonEmpty)
        return json.loads(jsonEmpty)

#儲存
def saveJsonData(path,data):
    with open(path, 'w') as file:
        file.write(str(data))

#讓json變得好閱讀
def formattedData(data):
    return json.dumps(data, indent=4)


#--------------------------------------------main
jsonData = checkPathAndRead(jsonData_path)

#新增資料
jsonData["name"] = "ryan"
jsonData["age"] = "22"
#新增json格式資料
jsonData["class1"] = jsonEmpty

saveJsonData(jsonData_path,formattedData(jsonData))
print(formattedData(jsonData))

mqtt paho訂閱發佈範例

簡單的mqtt訂閱及發佈範例

import paho.mqtt.client as mqtt

import secrets
import string

class MQTTHandler:
    def __init__(self, broker, port, client_id, username, password):
        self.client = mqtt.Client(client_id)
        self.client.username_pw_set(username, password)
        self.client.on_connect = self.on_connect
        self.client.on_message = self.on_message
        self.client.connect(broker, port, 60)

    def on_connect(self, client, userdata, flags, rc):
        print(f"Connected with result code {rc}")


    def on_message(self, client, userdata, msg):
        print(f"Received message on topic: {msg.topic} - Message: {msg.payload.decode()}")

    def on_publish(self, client, userdata, mid):
        print(f"Message {mid} published successfully")


    def subscribe(self,topic):
        self.client.subscribe(topic)

    def unsubscribe(self,topic):
        self.client.unsubscribe(topic)

    def publish(self, topic, message):
        self.client.publish(topic, message)

    def start(self):
        self.client.loop_start()

    def stop(self):
        self.client.loop_stop()

#Mqtt Broker網址
broker = ""
port = 1883
length = 10
# 生成包含大小寫字母和數字的隨機字串
client_id = ''.join(secrets.choice(string.ascii_letters + string.digits) for _ in range(length))
print(client_id)  # 印出隨機生成的 client_id

username = "username"
password = "password"

mqtt = MQTTHandler(broker, port, client_id, username, password)

mqtt.start()

topic = "your topic"
msg = "your message"

#發佈
mqtt.publish(topic, msg)
#訂閱
mqtt.subscribe(topic)

#如果要關閉就跑 mqtt.stop()

line notify

用line notify傳送”測試一下”

用line notify傳送電腦截圖

打包python程式

以下不是python程式碼而是.bat的程式碼,如果要打包可以新增此.bat程式碼,就可以一鍵打包

  • –windowed:是視窗化(不會有命令提示字元)
  • –onefile:意思是只有一個檔案
  • –icon=:打包後執行檔的圖示
  • –name=:打包後名稱
cd 程式的檔案路徑
pyinstaller --windowed --onefile --icon=圖示路徑 --name=打包出來的名稱 程式碼路徑

發佈留言

發佈留言必須填寫的電子郵件地址不會公開。 必填欄位標示為 *