sydomain

思绪来的快,去的也快,偶尔在这里停留。

python上传excel工作表到数据库(mysql)

import os
import pandas as pd
import pymysql

# 获取当前文件路径
current_path = os.path.dirname(os.path.realpath(__file__))
excel_file_path = os.path.join(current_path, 'a.xlsx')

# 读取Excel文件并去重
excel_data = pd.read_excel(excel_file_path)
excel_data.fillna('', inplace=True)  # 将所有NaN值替换为空字符串

excel_data.drop_duplicates(inplace=True)

success_count = 0
failure_count = 0
failed_data = []

# 连接到数据库,并指定字符集为utf8mb4
connection = pymysql.connect(
    host='localhost',
    port=3306,
    user='mykehu',
    password='MQW80nu9z2qpMiP',
    database='mykehu',
    charset='utf8mb4',
    collation='utf8mb4_general_ci'
)

with connection.cursor() as cursor:
    for index, row in excel_data.iterrows():
        customer_name = row['customer_name']
        contact_number = row['contact_number']
        home_address = row['home_address']
        tracking_number = row['tracking_number']
       
        # 查询数据库中是否已存在相同数据
        query_sql = "SELECT * FROM files WHERE customer_name = %s AND contact_number = %s AND home_address = %s AND tracking_number = %s"
        cursor.execute(query_sql, (customer_name, contact_number, home_address, tracking_number))
        result = cursor.fetchone()
       
        if result:
            continue  # 如果数据库中已存在相同数据,则跳过当前数据的插入操作
       
        insert_sql = "INSERT INTO files (customer_name, contact_number, home_address, tracking_number) VALUES (%s, %s, %s, %s)"
        try:
            cursor.execute(insert_sql, (customer_name, contact_number, home_address, tracking_number))
            success_count += 1
        except Exception as e:
            failure_count += 1
            failed_data.append(row)

connection.commit()
connection.close()

print("成功上传 {} 条数据".format(success_count))
print("上传失败 {} 条数据".format(failure_count))
if failure_count > 0:
    print("上传失败的数据:")
    for data in failed_data:
        print(data)

python合并excel工作表(xlsx跟xls)

import os  
import pandas as pd  
import tkinter as tk  
from tkinter import filedialog  
from tkinter.ttk import Button, Frame, Label  
 
def read_and_merge_excel_files(folder_path):  
    all_dfs = []  
    for file_name in os.listdir(folder_path):  
        if file_name.endswith(".xlsx") or file_name.endswith(".xls"):  
            file_path = os.path.join(folder_path, file_name)  
            try:  
                df = pd.read_excel(file_path, engine='openpyxl') if file_name.endswith(".xlsx") else pd.read_excel(file_path)  
                all_dfs.append(df)  
            except Exception as e:  
                print(f"An error occurred with {file_name}: {e}")  
        else:  
            print(f"跳过非Excel文件: {file_name}")  
     
    if all_dfs:  
        merged_data = pd.concat(all_dfs, ignore_index=True)  
        output_file = os.path.join(folder_path, 'new_merged_file.xlsx')  
        merged_data.to_excel(output_file, index=False, engine='openpyxl')  
        print("已完成: 合并所有Excel文件到当前目录下以new_merged_file.xlsx命名的文件")  
    else:  
        print("没有找到任何Excel文件")  
 
def select_folder():  
    folder_path = filedialog.askdirectory(title="选择文件夹")  
    if folder_path:  
        read_and_merge_excel_files(folder_path)  
    else:  
        print("请选择一个文件夹")  
 
def create_close_button(frame):  
    close_button = Button(frame, text="关闭", command=root.quit)  
    close_button.pack(side=tk.RIGHT)  
 
def create_title_frame():  
    title_frame = Frame(root, bg="blue", width=200, height=50)  
    Label(title_frame, text="Excel批量处理程序", bg="blue", fg="white").pack(side=tk.LEFT)  
    create_close_button(title_frame)  
    title_frame.pack(pady=10)    
 
# 创建主窗口    
root = tk.Tk()    
root.title("Excel 合并文件")    
root.geometry("400x300")  # 设置窗口大小    
root.configure(background='darkblue')  # 设置背景色   
 
# 添加文字说明  
label = tk.Label(root, text="1.选择你放文件的文件夹即可\n2.程序自动处理并自动保存\n\n例子:文件A放在文件夹B\n程序处理之后的新文件\n将自动保存在当前文件中", bg="darkblue", fg="white", font=("Arial", 16))  
label.pack(pady=10)  # 垂直方向上添加一些间距  

# 在标签的右下角添加作者信息  
author_label = tk.Label(root, text="作者:sy", bg="darkblue", fg="white", font=("Arial", 12))  
author_label.place(x=350, y=270, anchor="se")  # 将作者标签放置在标签的右下角  
   
# 添加一个按钮,点击时执行select_folder函数    
button = tk.Button(root, text="选择文件夹", command=select_folder)    
button.pack()    
   
# 运行主循环,等待事件处理    
root.mainloop()

python批量提取指定的列标

import os
import pandas as pd
import tkinter as tk
from tkinter import filedialog
from tkinter.ttk import Button, Frame, Label

def read_and_extract_columns(folder_path, selected_columns):
    for file_name in os.listdir(folder_path):
        if file_name.endswith(".xlsx"):
            file_path = os.path.join(folder_path, file_name)
            try:
                df = pd.read_excel(file_path, engine='openpyxl')
                selected_columns = [df.columns[i] for i in selected_columns]
                selected_columns = df[selected_columns]
                new_file_path = os.path.join(folder_path, 'new_' + file_name)
                selected_columns.to_excel(new_file_path, index=False, engine='openpyxl')
                print(f"已完成: {file_name}")
            except Exception as e:
                print(f"An error occurred with {file_name}: {e}")
        else:
            print(f"跳过非Excel文件: {file_name}")

def select_folder():
    folder_path = filedialog.askdirectory(title="选择文件夹")
    if folder_path:
        selected_columns = [0, 2, 4]  # 指定要提取的列标(索引)
        read_and_extract_columns(folder_path, selected_columns)
    else:
        print("请选择一个文件夹")

def create_close_button(frame):
    close_button = Button(frame, text="关闭", command=root.quit)
    close_button.pack(side=tk.RIGHT)

def create_title_frame():
    title_frame = Frame(root, bg="blue", width=200, height=50)
    Label(title_frame, text="Excel批量处理程序", bg="blue", fg="white").pack(side=tk.LEFT)
    create_close_button(title_frame)
    title_frame.pack(pady=10)

# 创建主窗口
root = tk.Tk()
root.title("Excel 解析")
root.geometry("400x300")  # 设置窗口大小
root.configure(background='darkblue')  # 设置背景色

# 添加文字说明
label = tk.Label(root, text="1.选择你放文件的文件夹即可\n2.程序自动处理并自动保存\n\n例子:文件A放在文件夹B\n程序处理之后的新文件\n将自动保存在文件夹B中", bg="darkblue", fg="white", font=("Arial", 16))
label.pack(pady=10)  # 垂直方向上添加一些间距

# 在标签的右下角添加作者信息
author_label = tk.Label(root, text="作者:sy", bg="darkblue", fg="white", font=("Arial", 12))
author_label.place(x=350, y=270, anchor="se")  # 将作者标签放置在标签的右下角

# 添加一个按钮,点击时执行select_folder函数
button = tk.Button(root, text="选择文件夹", command=select_folder)
button.pack()

# 运行主循环,等待事件处理
root.mainloop()

python批量提取excel中指定的行标跟列标

import tkinter as tk
from tkinter import filedialog
import os
import pandas as pd

def process_files():
    folder_path = filedialog.askdirectory()
    if folder_path:
        for file_name in os.listdir(folder_path):
            if file_name.endswith(".xlsx") or file_name.endswith(".xls") or file_name.endswith(".csv"):
                file_path = os.path.join(folder_path, file_name)
                if file_name.endswith(".csv"):
                    df = pd.read_csv(file_path)
                else:
                    df = pd.read_excel(file_path)
                selected_rows = df.iloc[[0, 1, 2]]  # 选择行标为0, 1, 2的行
                selected_columns = selected_rows.iloc[:, [0, 1, 2]]  # 选择列标为0, 1, 2的列
                new_file_name = f"new_{file_name}"
                new_file_path = os.path.join(folder_path, new_file_name)
                if file_name.endswith(".csv"):
                    selected_columns.to_csv(new_file_path, index=False)
                else:
                    selected_columns.to_excel(new_file_path, index=False)
                print(f"已处理 {new_file_path}")

root = tk.Tk()
root.title("Excel 指定行列")

# 设置窗口大小和位置
window_width = 300
window_height = 150
screen_width = root.winfo_screenwidth()
screen_height = root.winfo_screenheight()
x = (screen_width - window_width) // 2
y = (screen_height - window_height) // 2
root.geometry(f"{window_width}x{window_height}+{x}+{y}")

# 设置窗口背景颜色
root.configure(bg="#f2f2f2")

# 创建标签部件
label = tk.Label(root, text="选择要处理的文件夹", font=("Arial", 14), bg="#f2f2f2")
label.pack(pady=10)

# 创建按钮部件
button = tk.Button(root, text="选择文件夹", font=("Arial", 12), command=process_files)
button.pack(pady=10)

root.mainloop()

python-远程控制到期时间(服务端+客户端)

实现远程控制到期时间需要建立一个客户端-服务器的架构,其中服务器端负责存储到期时间并提供远程访问接口,客户端通过访问服务器接口来获取到期时间并进行检查。
以下是一个简单的示例,使用Python的Flask库实现服务器端和客户端的通信:
服务器端代码(server.py):

from flask import Flask, request, jsonify

app = Flask(__name__)
expiry_date = None

@app.route('/set_expiry', methods=['POST'])
def set_expiry():
    global expiry_date
    expiry_date = request.json['expiry_date']
    return jsonify({'message': '到期时间已设置'})

@app.route('/check_expiry', methods=['GET'])
def check_expiry():
    global expiry_date
    return jsonify({'expiry_date': expiry_date})

if __name__ == '__main__':
    app.run()

window下清理垃圾以及缓存文件

@echo off

echo 正在清理C盘垃圾文件和缓存文件,请稍候...

rem 清理垃圾文件
echo 清理垃圾文件...
cleanmgr /sagerun:1

rem 清理缓存文件
echo 清理缓存文件...
del /f /s /q "%temp%\*.*"
del /f /s /q "%systemroot%\Temp\*.*"

echo.
echo 清理完成!
echo 盘符空间已释放,运行速度可能会有所提升。

pause
exit

批处理创建windows凭证以及创建共享打印机

@echo off

echo ========================================
echo === 创建凭据并连接共享打印机 (根据提示来操作)===
echo ========================================

echo 请输入用户名(请输入administrator):
set /p username=

echo 请输入密码(是连打印机电脑的密码,不是你自己电脑密码):
set /p password=

echo 请输入目标地址(连打印机电脑的设备名称(Desktop-gedr7oh),桌面-此电脑(鼠标右键)-属性-设备名称):
set /p target=

echo 请输入共享打印机路径(格式:\\Desktop-gedr7oh\p1108)(打印机共享名称查看:控制面板-查看设备和打印机-打印机属性-共享-就能看到打印机的名称):
set /p printer=

rem 创建凭据
call :createCredentials %target% %username% %password%
if %errorlevel% equ 0 (
    echo.
    echo 凭据创建成功!
    echo.
) else (
    echo.
    echo 凭据创建失败!
    pause
    exit
)

rem 连接共享打印机
call :connectPrinter %printer% %target% %username% %password%
if %errorlevel% equ 0 (
    echo.
    echo 打印机添加成功!
    echo.
) else (
    echo.
    echo 打印机添加失败!
    echo 强制连接打印机...
    call :connectPrinter %printer% %target% %username% %password% /force
    if %errorlevel% equ 0 (
        echo.
        echo 打印机强制连接成功!
        echo.
    ) else (
        echo.
        echo 打印机强制连接失败!
        pause
        exit
    )
)

echo.
echo =======================
echo === 操作完成 ===
echo =======================
echo 凭据和打印机连接自行检查,拜拜!
echo.

pause

python进行key加密密码生成

import random
import string

def generate_random_key(length):
    # 生成包含大小写字母和数字的所有可用字符
    characters = string.ascii_letters + string.digits
    # 生成指定长度的随机密码
    password = ''.join(random.choice(characters) for _ in range(length))
    return password

# 生成16位密码
key_16 = generate_random_key(16)
print("16位密码:", key_16)

# 生成24位密码
key_24 = generate_random_key(24)
print("24位密码:", key_24)

# 生成32位密码
key_32 = generate_random_key(32)
print("32位密码:", key_32)

python绑定cpu序列号并对序列号进行加密配合到期时间

import sys
from datetime import datetime, timedelta
import tkinter as tk
from tkinter import messagebox
from Crypto.Cipher import AES
from Crypto.Util.Padding import pad, unpad
from Crypto.Random import get_random_bytes

# 加密密钥,必须是16、24或32字节长
key = b'ThisIsASecretKey'

def encrypt_cpu_serial(cpu_serial):
    cipher = AES.new(key, AES.MODE_ECB)
    encrypted_cpu_serial = cipher.encrypt(pad(cpu_serial.encode(), AES.block_size))
    return encrypted_cpu_serial

def decrypt_cpu_serial(encrypted_cpu_serial):
    cipher = AES.new(key, AES.MODE_ECB)
    decrypted_cpu_serial = unpad(cipher.decrypt(encrypted_cpu_serial), AES.block_size)
    return decrypted_cpu_serial.decode()

def check_expiry(expiry_date, encrypted_cpu_serial):
    current_date = datetime.now()
    expiry_date = datetime.strptime(expiry_date, "%Y-%m-%d %H:%M")

    if current_date < expiry_date:
        # 解密CPU序列号
        cpu_serial = decrypt_cpu_serial(encrypted_cpu_serial)

        # 检查CPU序列号是否匹配
        if cpu_serial == "BFEBFBFF000306A9":
            remaining_time = expiry_date - current_date
            remaining_days = remaining_time.days
            remaining_hours = remaining_time.seconds // 3600
            remaining_minutes = (remaining_time.seconds % 3600) // 60
            messagebox.showinfo("到期提醒", f"还有 {remaining_days} 天 {remaining_hours} 小时 {remaining_minutes} 分钟到期")
        else:
            messagebox.showwarning("到期提醒", "设备未授权,请联系客服")
            sys.exit(1)
    elif current_date == expiry_date:
        messagebox.showinfo("到期提醒", "今天到期")
    else:
        messagebox.showwarning("到期提醒", "已过期,请联系客服充值\n wx:13888888888")
        sys.exit(1)  # 使用非零状态码表示程序异常退出

expiry_date = "2024-02-08 12:30"
cpu_serial = "BFEBFBFF000306A9"

# 加密CPU序列号
encrypted_cpu_serial = encrypt_cpu_serial(cpu_serial)

check_expiry(expiry_date, encrypted_cpu_serial)

python绑定cpu序列号配合到期时间

import sys
from datetime import datetime, timedelta
import tkinter as tk
from tkinter import messagebox

def check_expiry(expiry_date, cpu_serial):
    current_date = datetime.now()
    expiry_date = datetime.strptime(expiry_date, "%Y-%m-%d %H:%M")

    if current_date < expiry_date:
        # 检查CPU序列号是否匹配
        if cpu_serial == "BFEBFBFF000306A9":
            remaining_time = expiry_date - current_date
            remaining_days = remaining_time.days
            remaining_hours = remaining_time.seconds // 3600
            remaining_minutes = (remaining_time.seconds % 3600) // 60
            messagebox.showinfo("到期提醒", f"还有 {remaining_days} 天 {remaining_hours} 小时 {remaining_minutes} 分钟到期")
        else:
            messagebox.showwarning("到期提醒", "设备未授权,请联系客服")
            sys.exit(1)
    elif current_date == expiry_date:
        messagebox.showinfo("到期提醒", "今天到期")
    else:
        messagebox.showwarning("到期提醒", "已过期,请联系客服充值\n wx:13888888888")
        sys.exit(1)  # 使用非零状态码表示程序异常退出

expiry_date = "2024-02-08 12:30"
cpu_serial = "BFEBFBFF000306A9"
check_expiry(expiry_date, cpu_serial)
<< 1 2 3 4 5 6 7 8 9 > >>

Powered By sydomain

Copyright Your WebSite.Some Rights Reserved.