首页 > 其他分享 >下载oss2上面的屏幕截图文件的代码

下载oss2上面的屏幕截图文件的代码

时间:2024-07-08 12:08:36浏览次数:15  
标签:截图 name oss2 mac tk entry download path 屏幕

import os
import re
import oss2
import tkinter as tk
from tkinter import filedialog, messagebox
from tkinter.scrolledtext import ScrolledText
import pickle
from tkinter import filedialog
import subprocess


def on_entry_focus_in(event):
    # 当Entry获得焦点时,检查是否包含默认文本并删除它
    if entry_date.get() == "例:2024-01-01":
        entry_date.delete(0, tk.END)
        # 如果需要,也可以在这里将前景色改回黑色或其他颜色


def on_entry_focus_out(event):
    # 当Entry失去焦点时,如果它是空的,则添加默认文本
    if not entry_date.get():
        entry_date.insert(0, "2024-01-01")


def create_dir_if_not_exists(path):
    if not os.path.exists(path):
        os.makedirs(path)


def mac_to_name(file_name, mac_to_name_dict):
    mac_address_pattern = re.compile(r'([0-9a-fA-F]{2}[_-]){5}[0-9a-fA-F]{2}')
    match = mac_address_pattern.search(file_name)
    if match:
        mac_address = match.group(0)
        if mac_address in mac_to_name_dict:
            return file_name.replace(mac_address, mac_to_name_dict[mac_address])
    return file_name


def download_matching_files(bucket, file_name_part, download_path, mac_to_name_dict, log_text):
    file_count = 0
    for obj in oss2.ObjectIterator(bucket):
        if file_name_part in obj.key:
            file_name = mac_to_name(obj.key, mac_to_name_dict)
            file_path = os.path.join(download_path, file_name)
            create_dir_if_not_exists(os.path.dirname(file_path))  # 确保目录存在
            try:
                bucket.get_object_to_file(obj.key, file_path)
                log_text.insert(tk.END, f'下载 {obj.key} 到 {file_path}\n')
                log_text.see(tk.END)  # 自动滚动到最后一行
                log_text.update()
                file_count += 1
            except Exception as e:
                log_text.insert(tk.END, f'下载 {obj.key} 失败: {str(e)}\n')
                log_text.see(tk.END)  # 自动滚动到最后一行
                log_text.update()
    return file_count


def save_mac_to_name_dict(mac_to_name_dict, filename='mac_to_name_dict.pkl'):
    with open(filename, 'wb') as f:
        pickle.dump(mac_to_name_dict, f)


def load_mac_to_name_dict(filename='mac_to_name_dict.pkl'):
    if os.path.exists(filename):
        with open(filename, 'rb') as f:
            return pickle.load(f)
    return {}


def start_download():
    file_name_part = entry_date.get()
    if not file_name_part:
        messagebox.showerror("错误", "请输入文件名中包含的日期")
        return

    download_path = entry_download_path.get()
    if not download_path:
        messagebox.showerror("错误", "请选择保存下载文件的路径")
        return

    mac_to_name_dict = load_mac_to_name_dict()

    auth = oss2.Auth('123', '456')
    bucket = oss2.Bucket(auth, 'http://oss-cn-hangzhou.aliyuncs.com', 'singsongpic')

    log_text.insert(tk.END, "开始下载文件...\n")
    file_count = download_matching_files(bucket, file_name_part, download_path, mac_to_name_dict, log_text)
    messagebox.showinfo("完成", f"总共下载的文件数:{file_count}")
    log_text.insert(tk.END, f"下载完成,总共下载的文件数:{file_count}\n")


# def add_mac_to_name():
#     mac = entry_mac.get()
#     name = entry_name.get()
#     if not mac or not name:
#         messagebox.showerror("错误", "请输入MAC地址和对应的姓名")
#         return
#
#     mac_to_name_dict = load_mac_to_name_dict()
#     mac_to_name_dict[mac] = name
#     save_mac_to_name_dict(mac_to_name_dict)
#     messagebox.showinfo("完成", "MAC地址和姓名已添加")
def open_download_folder():
    """打开下载文件夹"""
    # 确保entry_download_path中有有效的路径
    if entry_download_path.get():
        path = entry_download_path.get()
        if os.path.isdir(path):
            # 使用subprocess调用系统默认的文件夹打开程序
            if os.name == 'nt':  # Windows系统
                subprocess.Popen(['explorer', path])
            else:  # Linux或macOS系统
                subprocess.Popen(['xdg-open', path])
        else:
            print("路径不是有效的文件夹")
    else:
        print("请先选择下载路径")

def choose_directory():
    download_path = filedialog.askdirectory()
    if download_path:
        entry_download_path.delete(0, tk.END)
        entry_download_path.insert(0, download_path)


# GUI部分
root = tk.Tk()
root.title("OSS屏幕文件下载器-SINGSONG专用")

tk.Label(root, text="文件名中包含的日期:").grid(row=0, column=0)
entry_date = tk.Entry(root, foreground='dim gray')  # 使用浅灰色作为前景色
entry_date.insert(0, "例:2024-01-01")  # 插入默认文本
entry_date.grid(row=0, column=1)

# 绑定FocusIn事件以便在用户点击时删除默认文本
entry_date.bind("<FocusIn>", on_entry_focus_in)

tk.Label(root, text="下载文件保存路径:").grid(row=1, column=0)
entry_download_path = tk.Entry(root)
entry_download_path.grid(row=1, column=1)
tk.Button(root, text="选择下载路径", command=choose_directory).grid(row=1, column=2)

tk.Button(root, text="下载文件", command=start_download).grid(row=2, column=0, columnspan=3)
# # 创建打开下载文件夹按钮
# tk.Button(root, text="打开下载文件夹", command=open_download_folder).grid(row=2, column=2)
# #
# tk.Label(root, text="MAC地址:").grid(row=3, column=0)
# entry_mac = tk.Entry(root)
# entry_mac.grid(row=3, column=1)

# tk.Label(root, text="对应的姓名:").grid(row=4, column=0)
# entry_name = tk.Entry(root)
# entry_name.grid(row=4, column=1)

# tk.Button(root, text="添加MAC地址和姓名", command=add_mac_to_name).grid(row=5, column=0, columnspan=3)

# 添加用于显示下载信息的文本框
log_text = ScrolledText(root, wrap=tk.WORD, width=50, height=10)
log_text.grid(row=6, column=0, columnspan=3)

root.mainloop()

 

标签:截图,name,oss2,mac,tk,entry,download,path,屏幕
From: https://www.cnblogs.com/lyt263/p/18289672

相关文章

  • 好久不见!写了一个自动截图神器~【附源码】
    文章目录前言新增功能介绍截图功能快捷键设置程序设计和使用介绍操作菜单栏选择点击坐标点选择图片选择截图区域快捷键设置表格循环次数状态栏使用案例源代码前言好久没更新文章了。上一次更新是在4月16日差不多,也只是写了一个错误集,没什么太多内容。这一次,算是复......
  • 【分布式系统四】监控平台Zabbix相关运用(命令+截图详细版)
    目录一.使用zabbix监控nginx并发量连接数1.做好nginx配置2.完成监控数据脚本编写3.设置键值4.在zabbixweb端完成自定义监控项5.连接到grafana二.自动发现1.初始化操作2.安装启动zabbix-agent23.修改zabbix配置文件4.Web页面配置自动发现三.自动注册四.Zabbix......
  • osg使用整理(12):SSAO屏幕空间环境光遮蔽
    一、基础概念1、SSAO:通过将褶皱、孔洞和非常靠近墙面变暗的方法,近似模拟间接光照。SSAO称为屏幕空间环境光遮蔽,使用屏幕空间场景的深度而不是真实的几何体数据来确定遮蔽量,速度快效果好。2、实现原理:根据物体表面法线方向生成一个半球随机深度采样,主要看物体周围深度值大小,通......
  • js实现视频截图
    截图原理:文件上传,将视频绘制到canvas中进行截图贴代码工具函数->base64转成文件exportconstdataURLtoFile=({dataURL="",filename=""}:{dataURL:stringfilename:string})=>{constarr=dataURL.split(",")constmime=arr[0]......
  • ArcGIS API for Javascript解决html2canvas、domtoimage截图地图出现空白问题
    原因使用html2canvas、domtoimage进行截图时,会出现地图面板是空白的情况,报错如下:#1133msUnabletocloneWebGLcontextasithaspreserveDrawingBuffer=false<canvasstyle=​"width:​100%;​height:​100%;​>在通过ArcGISAPIforJavaScript4.X版本实例化地图的......
  • Python毕业设计-基于Python实现的深圳链家租房可视化系统源码+文档说明+条形图+数据库
    文章目录源码下载地址项目介绍项目功能界面预览项目备注源码下载地址源码下载地址点击这里下载代码项目介绍项目历经数据采集->数据展示->数据分析->数据预测lianjia_1:scrapy爬虫项目lianjia_show:flask对采集的数据进行展示链家房价预测:采集的数据进行分析......
  • 如何使用 CSS 实现响应式布局,以适应不同屏幕尺寸和设备类型?
    要实现响应式布局,可以使用CSS媒体查询和其他CSS属性进行适应不同屏幕尺寸和设备类型的布局调整。以下是实现响应式布局的一般步骤:使用viewport元标签:在html文件的元素中添加以下代码,以确保页面在移动设备上正确显示:<metaname="viewport"content="width=device-width,......
  • 【pytest】失败用例,桌面截图
    @pytest.hookimpl(tryfirst=True,hookwrapper=True)defpytest_runtest_makereport(item,call):#executeallotherhookstoobtainthereportobjectoutcome=yieldrep=outcome.get_result()#rep可以拿到用例的执行结果详情ifrep.when=="ca......
  • Klipper RP2040 display ssd1306 0.96 屏幕配置
    接线屏幕接线parampinGNDGNDVCCVCCSCLSDA编码器接线parampinGNDGNDEN1VCCEN2CLklipper配置#显示屏及旋钮[display]lcd_type:ssd1306#i2c_bus:i2c0dencoder_pins:^gpio24,^gpio23encoder_steps_per_detent:2c......
  • MySQL----彻底卸载(附带每一步截图)
    停止mysql服务打开任务管理器,点击服务,找到mysql服务,这里我的是MySQL57,找到mysql服务后选中,点击右键选择停止服务删除mysql服务win+R打开命令框,输入cmd打开cmd控制台或者电脑左下角输入cmd搜索,选择管理员身份进入cmd控制台(否则会拒绝访问),弹出是否允许该应用对设备进行修......