sydomain

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

python 增加到期时间(精确到小时分)

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

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

    if current_date < expiry_date:
        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} 分钟到期")
    elif current_date == expiry_date:
        messagebox.showinfo("到期提醒", "今天到期")
    else:
        messagebox.showwarning("到期提醒", "已过期,请联系客服充值\n wx:13888888888")
        sys.exit(1)  # 使用非零状态码表示程序异常退出

expiry_date = "2024-02-05 12:30"
check_expiry(expiry_date)

python 增加到期时间

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

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

    if current_date < expiry_date:
        remaining_days = (expiry_date - current_date).days
        messagebox.showinfo("到期提醒", f"还有 {remaining_days} 天到期")
    elif current_date == expiry_date:
        messagebox.showinfo("到期提醒", "今天到期")
    else:
        messagebox.showwarning("到期提醒", "已过期")
        sys.exit(1)  # 使用非零状态码表示程序异常退出

expiry_date = "2024-2-5"
check_expiry(expiry_date)

python脚本运行方式 | Linux、Windows操作下如何打包并运行python文件

Windows平台

 说明:在Windows平台打包时,python提供了非常便捷的扩展库pyinstall

安装

pip install pyinstall

参数说明

-h  查看帮助

--clean  清理打包过程中的临时文件

-D,--onedir  默认值,生成dist文件夹

-F,--onefile  在dist文件夹中只生成独立的打包文件

Python PyAutoGUI返回 “ImageNotFoundException“问题

image.png

当PyAutoGUI中的locateCenterOnScreen()方法找不到图像时会出现这个错误,但在我另一个项目中同样的程序,当locateCenterOnScreen()方法找不到图像时会返回None,不会报错,

win7安装python3.8安装不了的解决办法

image.png

python pyinstaller pyautogui 打包报错,提示没有后找到pyautogui模块

前言

python项目使用了pyautogui库,使用pyinstaller打包后运行,提示没有找到pyautogui模块。


一、前因

pyinstaller打包exe时报错问题记录

一、简介

最近用pyautogui库写了一个自动化操作的小程序,为了提高识别效率,使用了confidence参数,代码为xy = pyautogui.locateCenterOnScreen(p,grayscale= False,confidence=0.8),其中p为待识别图片参数,confidence:表示灰度值。程序完成后运行没有异常,然后封装时出现一些问题,下面列出两个主要的BUG。

python将工作表中的数据解析成json文件并上传

# -*- coding:utf-8 -*-
import json
import openpyxl
import xlrd
import csv
import os
import time
import sys
import datetime
import requests
import re


def traverse_dir(path):
    traverse_dir_data = []
    for file in os.listdir(path):
        file_path = os.path.join(path, file)
        if os.path.isdir(file_path) == False:
            filename = file_path.split('.')
            lastindex = len(filename) - 1
            if filename[lastindex] == 'xls' or filename[lastindex] == 'xlsx' or filename[lastindex] == 'csv':
                traverse_dir_data.append(file_path)
    return traverse_dir_data


def show_time():
    current_time = datetime.datetime.now().strftime('%Y-%m-%d %H:%M:%S')
    print("现在时间是: " + str(current_time))



def explain_excel(path, index=0):
    file_data = []
    if path[-3:] == 'xls':
        workbook = xlrd.open_workbook(path)
        workbook_sheet = workbook.sheet_by_index(index)
        workbook_sheet_rows = workbook_sheet.nrows
        if workbook_sheet_rows > 0:
            for row_i in range(0, workbook_sheet_rows):
                if len(workbook_sheet.row_values(row_i)) > 0:
                    file_data.append(workbook_sheet.row_values(row_i))
    if path[-4:] == 'xlsx':
        workbook = openpyxl.load_workbook(path)
        for row_data in workbook.worksheets[index].values:
            if len(row_data) > 0:
                file_data.append(row_data)
    return file_data


def explain_csv(path):
    file_data = []
    if path[-3:] == 'csv':
        csv_reader = csv.reader(open(path))
        for text in csv_reader:
            if len(text) > 0:
                file_data.append(text)
    return file_data


# 解析并导出文件内容
def explain_file(path):
    file_data = []
    path_data = path.split('.')
    lastindex = len(path_data)-1
    if path_data[lastindex] == 'xls' or path_data[lastindex] == 'xlsx':
        file_data = explain_excel(path)
    if path_data[lastindex] == 'csv':
        file_data = explain_csv(path)
    return file_data

def upload_data(excel_data,excel_i,filename):
    errfile = []
    if len(excel_data) < 2:
        print('文件没有内容')
    else:
        excel_content = ''
        excel_obj = []
        ed_i = 0
        upload_count = 50
        for ed in excel_data:
            if ed_i >= 0:
                excel_obj.append({
                    'number': ed_i,
                    'tracking_no': ed[0],
                    'buyer_name': ed[1],
                    'buyer_mobile': ed[2],
                    'buyer_address': ed[3]
                })
                excel_i = excel_i + 1
            ed_i = ed_i + 1
        if excel_i > 0:
            show_time()
            post_data = []
            all_count = len(excel_obj)
            print('共有' + str(all_count) + '条记录待上传')
            for item in excel_obj:
                postdata_count = len(post_data)
                if postdata_count == upload_count:
                    print('分批开始上传' + str(postdata_count) + '条数据')
                    current_path = current_dir + '\\' + datetime.datetime.now().strftime('%Y-%m-%d-%H-%M-%S') + '.json'
                    print(current_path)
                    f = open(current_path, 'w', encoding='utf-8')
                    f.write(json.dumps(post_data, ensure_ascii=False))
                    f.close()
                    url = 'http://lbb-chrome-api2.alible.cn/chrome/v3/batch_insert_order'
                    files = {'order': open(current_path, 'rb')}
                    r = requests.post(url, files=files, timeout=600)
                    try:
                        data = r.json()
                        print(data['data']['result'])
                    except:
                        print(r.status_code)
                        if r.status_code == 502:
                            errfile.append(filename)

                    all_count = all_count - upload_count
                    print('分批上传结束')
                    print('还剩下' + str(all_count) + '条数据待上传')
                    post_data.clear()
                    sys.stdout.flush()
                    print('暂停10秒再上传')
                    time.sleep(10)
                else:
                    post_data.append(item)


            print('剩余'+str(all_count)+'条')
            if all_count > 0:
                print('分批开始上传' + str(all_count) + '条数据')
                current_path = current_dir + '\\' + datetime.datetime.now().strftime(
                    '%Y-%m-%d-%H-%M-%S') + '.json'
                print(current_path)
                f = open(current_path, 'w', encoding='utf-8')
                f.write(json.dumps(post_data, ensure_ascii=False))
                f.close()
                url = 'http://lbb-chrome-api2.alible.cn/chrome/v3/batch_insert_order'
                files = {'order': open(current_path, 'rb')}
                r = requests.post(url, files=files, timeout=600)
                try:
                    data = r.json()
                    print(data['data']['result'])
                except:
                    print(r.status_code)
                    if r.status_code == 502:
                        errfile.append(filename)
                print('分批上传结束')
        else:
            print('no file to export')

    return errfile



if __name__ == '__main__':
    os.environ['REQUESTS_CA_BUNDLE'] = os.path.join(os.path.abspath(os.path.dirname(__file__)), 'cacert.pem')

    # 当前路径
    print('开始遍历目录')
    current_dir = os.path.abspath('.')
    file_path_data = traverse_dir(current_dir)
    finish = []
    errorFile = []
    for f in file_path_data:
        excel_i = 0
        show_time()
        print('开始读取文件')
        print(f)
        excel_data = explain_file(f)
        _errorFile = upload_data(excel_data, excel_i, f)
        if len(_errorFile) > 0:
            errorFile.append(''.join(_errorFile))
        finish.append(f)
        f_length = len(finish)
        print('已经传完'+str(f_length)+'个文件,包括'+str(finish))
        if len(errorFile) > 0:
            print('出错文件,包括' + ''.join(errorFile))
        print('暂停10秒钟,继续读取下一个文件')
        show_time()
        time.sleep(10)
    print('结束所有文件上传')
    show_time()

python处理excel工作表中将地址电话姓名拆分出来

# -*- coding:utf-8 -*-
import openpyxl
import xlrd
import csv
import os
import time
import sys
import datetime

def show_message(message=''):
    print(time.strftime("%Y-%m-%d %H:%M:%S", time.localtime()), str(message))


def explain_excel(path, index=0):
    file_data = []
    if path[-3:] == 'xls':
        workbook = xlrd.open_workbook(path)
        workbook_sheet = workbook.sheet_by_index(index)
        workbook_sheet_rows = workbook_sheet.nrows
        if workbook_sheet_rows > 0:
            for row_i in range(0, workbook_sheet_rows):
                if len(workbook_sheet.row_values(row_i)) > 0:
                    file_data.append(workbook_sheet.row_values(row_i))
    if path[-4:] == 'xlsx':
        workbook = openpyxl.load_workbook(path)
        for row_data in workbook.worksheets[index].values:
            if len(row_data) > 0:
                file_data.append(row_data)
    return file_data      

def explain_csv(path):
    file_data = []
    if path[-3:] == 'csv':
        csv_reader = csv.reader(open(path))
        for text in csv_reader:
            if len(text) > 0:
                file_data.append(text)
    return file_data

# 解析并导出文件内容
def explain_file(path):
    explain_filename = path.replace('\\', '/').split('/')
    explain_filename = explain_filename[-1].split('.')
    explain_filename = explain_filename[0]
    file_data = []
    path_data = path.split('.')
    if path_data[-1] == 'xls' or path_data[-1] == 'xlsx':
        file_data = explain_excel(path, int(sys.argv[4]))
    if path_data[-1] == 'csv':
        file_data = explain_csv(path)
    return file_data
   
def split_mobile(mobile):
   
    province = ['上海市', '云南省', '内蒙古自治区', '北京市', '吉林省', '四川省', '天津市', '宁夏回族自治区', '安徽省', '山东省', '山西省', '广东省','广西壮族自治区', '广西省', '新疆维吾尔自治区', '江苏省',
                                '江西省', '河北省', '河南省', '浙江省', '海南省', '湖北省', '湖南省', '甘肃省', '福建省', '西藏自治区', '贵州省', '辽宁省', '重庆市', '陕西省', '青海省', '黑龙江省',
                                    '上海', '云南', '内蒙古', '北京', '吉林', '四川', '天津', '宁夏', '安徽', '山东', '山西', '广东', '广西', '新疆', '江苏',
                                '江西', '河北', '河南', '浙江', '海南', '湖北', '湖南', '甘肃', '福建', '西藏', '贵州', '辽宁', '重庆', '陕西', '青海', '黑龙江']
    for p in province:
        mobile = mobile.replace(p," ")      
    addressData = mobile.split(" ")
    if len(addressData)>1:
        mobile = addressData[0]
    return mobile
           


if __name__ == '__main__':
    os.environ['REQUESTS_CA_BUNDLE'] =  os.path.join(os.path.abspath(os.path.dirname(__file__)), 'cacert.pem')
    # 记录 excel 内容
    excel_rows = []
    tmp_file_data = []
    # excel 行数记数
    excel_i = 0
    # 当前路径
    current_dir = os.path.abspath('.')
    current_path = current_dir + "\\" + sys.argv[1]
    excel_data = explain_file(current_path)
   
    if len(excel_data) < 2:
        print('文件: ' + sys.argv[1] + ' 没有内容')
    else:
        wb = openpyxl.Workbook()
        ws = wb.create_sheet('Sheet1', 0)
        ws.append(['快递单号', '姓名', '电话', '地址'])
        ed_i = 0
       
        for ed in excel_data:
            has_ed = False
            if ed_i >= 0:
                tracking_i = int(sys.argv[2])
                address_i = int(sys.argv[3])
                if ed[tracking_i] != None and ed[address_i] != None:
                    tmp_address = str(ed[address_i])
                    addressData = tmp_address.split(' ')
                    if len(addressData) == 3:
                        name = addressData[0]
                        mobile = addressData[1]
                        address = addressData[2]
                        ws.append([ed[tracking_i], name, mobile, address, ed_i])
                        excel_i = excel_i + 1
                        continue
                    tmp_address = tmp_address.replace(' ', '')
                    tmp_address = tmp_address.lstrip()
                    tmp_address = tmp_address.replace(',', '')
                    addressData = tmp_address.split(' ')
                    if len(addressData) > 3:
                        for a in addressData:
                            try:
                                if a == str(int(a)) and len(a) < 11:
                                   tmp_address = tmp_address.replace(' ', '')
                                   addressData = tmp_address.split(' ')
                                   break
                            except:
                                pass
                    if len(addressData) == 2:
                        tmp_address = str(ed[address_i]).replace(' ', '')
                        addressData = tmp_address.split(' ')

                    if len(addressData) > 3:
                        name = addressData[0]
                        mobile = addressData[1]
                        if mobile[0:1] == '\n':
                            print('第 ' + str(ed_i + 1) + ' 行报错', addressData)
                            os._exit(0)
                        if '\n' in mobile:
                            mobileData = mobile.split('\n')
                            try:
                                mobile = mobileData[0]
                                mobile_find = mobile.find(':')
                                if mobile_find > -1:
                                    #mobileData[0] = mobileData[0][0:mobile_find]
                                    name = mobile.split(':')[1]
                                # tmp_mobile = int(mobileData[0])
                            except:
                                print('第 ' + str(ed_i + 1) + ' 行手机号错误', mobileData[0])      
                            mobile = '\t' + mobileData[0]
                            address = ''.join(mobileData[1:] + addressData[2:]).replace(' ', '')
                        else:
                            mobile = str("\t" + addressData[1])
                            address = ''.join(addressData[2:]).replace(' ', '')
                        has_ed = True
                    elif len(addressData) == 1:
                        province = ['上海市', '云南省', '内蒙古自治区', '北京市', '吉林省', '四川省', '天津市', '宁夏回族自治区', '安徽省', '山东省', '山西省', '广东省','广西壮族自治区', '广西省', '新疆维吾尔自治区', '江苏省',
                                '江西省', '河北省', '河南省', '浙江省', '海南省', '湖北省', '湖南省', '甘肃省', '福建省', '西藏自治区', '贵州省', '辽宁省', '重庆市', '陕西省', '青海省', '黑龙江省',
                                    '上海', '云南', '内蒙古', '北京', '吉林', '四川', '天津', '宁夏', '安徽', '山东', '山西', '广东', '广西', '新疆', '江苏',
                                '江西', '河北', '河南', '浙江', '海南', '湖北', '湖南', '甘肃', '福建', '西藏', '贵州', '辽宁', '重庆', '陕西', '青海', '黑龙江']
                        address = tmp_address
                        for p in province:
                            if p in address:
                                addressData = address.split(p)
                                if len(addressData) > 1:
                                    address = p + p.join(addressData[1:])
                                    name = tmp_address.replace(address, '')
                                    nameData = name.split('1')
                                    if len(nameData) > 1:
                                        name = nameData[0]
                                        mobile = '\t1' + '1'.join(nameData[1:])
                                        mobile = split_mobile(mobile)
                                        has_ed = True
                                        namefind = mobile.find(':')
                                        if namefind > -1:
                                            namefind = mobile.split(":")
                                            name = namefind[1]
                                            mobile = namefind[0]
                                        break
                                    else:
                                        print('没有找到名字'+str(nameData))
                                else:
                                    print('没有找到地址'+str(addressData))

                    if has_ed == True:
                        ws.append([ed[tracking_i], name, mobile, address, ed_i])
                        excel_i = excel_i + 1
            ed_i = ed_i + 1    
        if excel_i > 0:
            current_path = current_dir + '\\' + datetime.datetime.now().strftime('%Y-%m-%d-%H-%M-%S') + '.xlsx'
            wb.save(current_path)
            wb.close()
            print('file export finished: ' + current_path)
        else:
            wb.close()
            print('no file to export')

               
           
   
   
    # print(os.path.abspath(os.path.dirname(__file__)))
   
    # print(os.getcwd())

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[[5, 6, 7, 8]]
                selected_columns = selected_rows[['姓名', '联系方式', '收货地址']]  # 替换为你要提取的列名
                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()
<< < 1 2 3 4 5 6 > >>

Powered By sydomain

Copyright Your WebSite.Some Rights Reserved.