无忧启动论坛

 找回密码
 注册
搜索
系统gho:最纯净好用系统下载站投放广告、加入VIP会员,请联系 微信:wuyouceo
查看: 984|回复: 37
打印 上一主题 下一主题

[求助] 用别人家电脑,一天一点代码,改了半年多,谁会python,帮忙打包成单文件

  [复制链接]
跳转到指定楼层
1#
发表于 前天 16:51 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
本帖最后由 语之男 于 2025-2-21 10:59 编辑

这是一个文件管理器,本来是想做个运行对比MD5和运行正则重命名的,后来需要压缩解压,搜索,的查找文件,接着加入预览功能,然后慢慢的这么多了,但是不知道运行后界面啥样,期待高手修改一下,做个好看的运行界面。打包一下成单文件,方便共享给大家用


注意事项
需要安装py7zlib、zipfile、rarfile、isomounter、search、unlock、clean等库以支持相关功能。
确保Python环境支持Tkinter。
运行前建议备份文件夹,以防误操作。


步骤一:打包为单文件EXE
安装PyInstaller:

PyInstaller是一个将Python脚本打包为EXE的工具。您可以通过以下命令安装它:
pip install pyinstaller
生成EXE文件:

使用PyInstaller将Python脚本打包为EXE:
pyinstaller --onefile your_script.py
这将生成一个独立的EXE文件,所有依赖库都会打包进去。
源代码:https://yvnan.lanzn.com/iBaYE2odx13c
2#
发表于 前天 17:12 | 只看该作者
不会代码,但很好奇楼主做的是个什么软件
回复

使用道具 举报

3#
发表于 前天 17:19 | 只看该作者
楼主自己没有电脑?
可以考虑买几百块便宜的二手笔记本,只要能够跑win10,做Python开发就够用

点评

我的电脑300元自己配的,E3 1230v2、gtx650、16G内存,一般的都可以,大型游戏不行。2天的工钱省下来就可以了。  发表于 昨天 09:57
我电脑坏了好几年了,i5200CPU,这个代码是我用AI一点一点弄的,文件管理器,支持正则重命名,支持压缩解压,预览图片文档视频这样子,可以对比MD5等  详情 回复 发表于 前天 17:36
回复

使用道具 举报

4#
发表于 前天 17:29 来自手机 | 只看该作者
楼主可以用pip安装auto-py-to-exe自行打包,中文图形界面,免输入pyinstaller命令
回复

使用道具 举报

5#
发表于 前天 17:30 | 只看该作者
PY体积太大了...


二○二五年二月二十日
回复

使用道具 举报

6#
 楼主| 发表于 前天 17:36 | 只看该作者
Paudy 发表于 2025-2-20 17:19
楼主自己没有电脑?
可以考虑买几百块便宜的二手笔记本,只要能够跑win10,做Python开发就够用

我电脑坏了好几年了,i5200CPU,这个代码是我用AI一点一点弄的,文件管理器,支持正则重命名,支持压缩解压,预览图片文档视频这样子,可以对比MD5等
回复

使用道具 举报

7#
发表于 前天 18:22 | 只看该作者
pdfviewer、cadviewer、videoplayer、py7zlib、isomounter、search这几个库从哪里找?这个代码你尝试运行过了吗?

点评

说的对,这里有三个自定义库(自己组的库)没有,无法安装成exe文件  发表于 前天 20:46
回复

使用道具 举报

8#
发表于 前天 18:31 | 只看该作者
没有py7zlib  你用的python2吗?
回复

使用道具 举报

9#
发表于 前天 18:34 | 只看该作者
looxxp 发表于 2025-2-20 18:31
没有py7zlib  你用的python2吗?

用的python3.8.10
回复

使用道具 举报

10#
发表于 前天 20:45 | 只看该作者

楼主可以用pip安装auto-py-to-exe自行打包,中文图形界面,免输入pyinstaller命令
回复

使用道具 举报

11#
发表于 前天 20:46 | 只看该作者
自定义库
以下这些库在代码中被导入,但并非 Python 标准库或常见的第三方库,你需要确保这些库存在并且可以正常使用:
pdfviewer:用于预览 PDF 文件。你需要自己实现这个库或者找到合适的第三方库来替代。
cadviewer:用于预览 CAD 文件(如 DWG、DXF)。同样,你需要自己实现或找到合适的库。
videoplayer:用于播放视频文件。你需要实现这个库或者使用现有的视频播放库。
isomounter:用于挂载 ISO 镜像文件。你需要实现这个库或者找到合适的库。
search:用于搜索文件。你需要实现这个库或者使用现有的文件搜索库。
unlock:用于解锁文件。你需要实现这个库。
clean:用于系统清理和软件优化。你需要实现这个库。

点评

老铁谢谢,我是在便宜电脑上弄的,这不出来打工了么,刚问他,他说pip弄的,库可以pip弄上,我不懂,我是自己的想法,让后一边摸索一边查问gpt,最后出来的代码。  详情 回复 发表于 前天 21:13
回复

使用道具 举报

12#
发表于 前天 21:05 | 只看该作者
很敬业,不错!
回复

使用道具 举报

13#
 楼主| 发表于 前天 21:13 来自手机 | 只看该作者
呆萌鼠 发表于 2025-2-20 20:46
自定义库
以下这些库在代码中被导入,但并非 Python 标准库或常见的第三方库,你需要确保这些库存在并且可 ...

老铁谢谢,我是在便宜电脑上弄的,这不出来打工了么,刚问他,他说pip弄的,库可以pip弄上,我不懂,我是自己的想法,让后一边摸索一边查问gpt,最后出来的代码。
回复

使用道具 举报

14#
 楼主| 发表于 前天 21:13 来自手机 | 只看该作者
在朋友电脑上,抱歉啊打错字
回复

使用道具 举报

15#
发表于 前天 21:39 | 只看该作者
用AI生成代码,还是需要自己在本地先运行代码,有错误的地方需要继续修改,等到本地能正常运行的时候再打包成exe。
这个代码的第75行就有错误,而且还有很多模块没有实现。
回复

使用道具 举报

16#
发表于 前天 22:17 | 只看该作者
本帖最后由 呆萌鼠 于 2025-2-21 10:02 编辑

我现在一行python代码也不会,但是写了好几个程序了。建议使用豆包为主(对话语言理解能力强),deepseek、文心一言、CHATGPT等等为辅,网页版本足够。
现在有些国内大模型很多都免费了,我现在没有时间弄了,你可以问问豆包这些AI或网上搜索,就会知道有哪些。
在B站可以搜索相关教程。你可以慢慢学。代码由简单慢慢询问学习。如何询问是关键
可以给你提供一些参考:
一  安装python、pycharm或Visual Studio Code(去B站学习安装方法)。二  将代码复制到记事本,以UTF-8编码(一般是系统默认的)另存为py格式(像cmd代码转成bat那样)。
三  用cmd、pycharm或Visual Studio Code打开py文件,并且运行。如果没有库就先安装库(用cmd安装即可)
四  如果不运行、有错误就会有提示在下面,复制错误信息到AI,反复询问。
     再把改的代码复制保存到刚才的py文件重新运行,反复直到完美解决。
五  常用的打包库pyinstaller库或带界面的auto-py-to-exe安装,cmd输入一行命令即可打包。还有其他的库可以制作的。


AI不是什么都行,还有待发展,注意询问方法最主要,还有在回答很乱的时候,可以开新的对话。
我是用浏览器扩展SingleFile下载整个AI询问的网页保存作为备份参考。


以上只是我个人的经验,仅供参考。








回复

使用道具 举报

17#
发表于 前天 22:22 | 只看该作者
最好要自己大概知道AI写的代码是什么意思,这样有一些明显的错误可以指正。
回复

使用道具 举报

18#
发表于 前天 23:19 | 只看该作者
尽信ai不如无ai
吾爱破解已经有人发帖发现有人给ai投毒了,跟我之前的预测一样,提防着点吧
回复

使用道具 举报

19#
发表于 前天 23:37 | 只看该作者
谢谢分享
回复

使用道具 举报

20#
发表于 前天 23:37 | 只看该作者
学习了
回复

使用道具 举报

21#
发表于 昨天 00:29 | 只看该作者
本帖最后由 BestMiniPE 于 2025-2-21 00:36 编辑

思路不错,改了一下,可以编译,功能暂时没测试。
import os
import re
import datetime
import hashlib
import time
import tkinter as tk
from tkinter import filedialog
from PIL import Image
#from tkPDFViewer2 import tkPDFViewer2 as pdf
#from cadviewer import CADViewer
#from videoplayer import VideoPlayer
#import py7zlib
import zipfile
import rarfile
#import isomounter
#import search
#import unlock
import clean
import zlib  # 导入 zlib 模块用于计算 CRC32 值
import shutil  # 导入 shutil 模块用于文件操作

def get_md5_value(file_path):
    try:
        with open(file_path, 'rb') as f:  # 以二进制模式打开文件
            md5 = hashlib.md5(f.read()).hexdigest()
        return md5
    except Exception as e:
        print(f"计算 MD5 值时出错: {e}")
        return None

def get_sha256_value(file_path):
    try:
        with open(file_path, 'rb') as f:  # 以二进制模式打开文件
            sha256 = hashlib.sha256(f.read()).hexdigest()
        return sha256
    except Exception as e:
        print(f"计算 SHA256 值时出错: {e}")
        return None

def get_crc32_value(file_path):
    try:
        with open(file_path, 'rb') as f:  # 以二进制模式打开文件
            crc32 = zlib.crc32(f.read())  # 使用 zlib.crc32 计算 CRC32 值
        return crc32
    except Exception as e:
        print(f"计算 CRC32 值时出错: {e}")
        return None
        
        
def rename_files_with_gui(directory, pattern, replacement, date_format, new_suffix, include_size, include_original_date, include_md5, include_sha256, include_crc32, change_original_time):
    files = os.listdir(directory)
    current_date = datetime.datetime.now().strftime(date_format)

    for filename in files:
        file_path = os.path.join(directory, filename)
        if re.match(pattern, filename):
            new_filename = re.sub(pattern, replacement, filename)
            if date_format:
                new_filename = new_filename + "_" + current_date
            if include_size:
                file_size = os.path.getsize(file_path)
                new_filename = new_filename + "_Size_" + str(file_size)
            if include_original_date:
                file_date = datetime.datetime.fromtimestamp(os.path.getctime(file_path)).strftime("%Y-%m-%d")
                new_filename = new_filename + "_OrigDate_" + file_date
            if include_md5:
                md5_value = get_md5_value(file_path)
                new_filename = new_filename + "_MD5_" + md5_value
            if include_sha256:
                sha256_value = get_sha256_value(file_path)
                new_filename = new_filename + "_SHA256_" + sha256_value
            if include_crc32:
                crc32_value = get_crc32_value(file_path)
                new_filename = new_filename + "_CRC32_" + str(crc32_value)
            if new_suffix:
                old_suffix = os.path.splitext(filename)[1]
                new_filename = os.path.splitext(new_filename)[0] + new_suffix
            new_file_path = os.path.join(directory, new_filename)
            os.rename(file_path, new_file_path)
            if change_original_time:
                new_time = time.time()
                os.utime(new_file_path, (new_time, new_time))
            print(f"重命名: {filename} -> {new_filename}")
        else:
            print(f"跳过: {filename}(不符合模式)")

def compare_files(file1, file2):
    file1_info = {
        "文件名": os.path.basename(file1),
        "创建时间": datetime.datetime.fromtimestamp(os.path.getctime(file1)).strftime("%Y-%m-%d %H:%M:%S"),  # 补充键名
        "修改时间": datetime.datetime.fromtimestamp(os.path.getmtime(file1)).strftime("%Y-%m-%d %H:%M:%S"),
        "MD5值": get_md5_value(file1),
        "SHA256值": get_sha256_value(file1),
        "CRC32值": get_crc32_value(file1),
    }
    file2_info = {
        "文件名": os.path.basename(file2),
        "创建时间": datetime.datetime.fromtimestamp(os.path.getctime(file2)).strftime("%Y-%m-%d %H:%M:%S"),
        "修改时间": datetime.datetime.fromtimestamp(os.path.getmtime(file2)).strftime("%Y-%m-%d %H:%M:%S"),
        "MD5值": get_md5_value(file2),
        "SHA256值": get_sha256_value(file2),
        "CRC32值": get_crc32_value(file2),
    }
    differences = {}
    for key in file1_info:
        if file1_info[key] != file2_info[key]:
            differences[key] = (file1_info[key], file2_info[key])
    return differences

def show_file_type(event):
    # 这里需要根据实际情况修改,event.widget 并没有 get_selected_file_path 和 show_tooltip 方法
    print("需要根据实际情况实现获取文件路径和显示提示信息的功能")

def preview_file_content(file_path):
    file_type = os.path.splitext(file_path)[1]
    if file_type in [".jpg", ".png", ".bmp"]:
        Image.open(file_path).show()
    #elif file_type == ".pdf":
        #pdf.open(file_path)
    #elif file_type in [".dwg", ".dxf"]:
        #CADViewer.open(file_path)
    #elif file_type in [".mp4", ".avi", ".mov"]:
        #VideoPlayer.open(file_path)
    elif file_type in [".doc", ".xls", ".ppt"]:
        os.startfile(file_path)
    else:
        print(f"不支持预览的文件类型: {file_type}")

def copy_file(file_path, target_path):
    shutil.copy2(file_path, target_path)  # 使用 shutil.copy2 进行文件复制
    print(f"复制: {file_path} -> {target_path}")

def cut_file(file_path, target_path):
    shutil.move(file_path, target_path)  # 使用 shutil.move 进行文件移动(剪切)
    print(f"剪切: {file_path} -> {target_path}")

def delete_file(file_path):
    os.remove(file_path)  # 使用 os.remove 进行文件删除
    print(f"删除: {file_path}")

def move_file(file_path, target_path):
    shutil.move(file_path, target_path)
    print(f"移动: {file_path} -> {target_path}")

#def compress_to_7z(file_path, output_path, password=None):
    #py7zlib.compress(file_path, output_path, compression_level="max", password=password)
    #print(f"压缩: {file_path} -> {output_path}")

#def #decompress_7z(file_path, output_path, password=None):
    #py7zlib.decompress(file_path, output_path, password=password)
    #print(f"解压: {file_path} -> {output_path}")

#def mount_iso(iso_path):
    #isomounter.mount(iso_path)
    #print(f"挂载: {iso_path}")

#def search_files(directory, keyword):
    #results = search.search(directory, keyword)
    #for result in results:
        #print(f"搜索结果: {result}")

#def unlock_file(file_path):
    #unlock.unlock(file_path)
    #print(f"解锁: {file_path}")

def clean_system():
    clean.clean_memory()
    clean.clean_system_garbage()
    clean.clean_cache()
    print("系统清理完成")

def optimize_software():
    clean.optimize()
    print("软件优化完成")

def main():
    root = tk.Tk()
    root.title("钢筋翻样徐林林 文件重命名")

    contact_label = tk.Label(root, text="微信QQ:9632xxx 手机:1583561xxxx")
    contact_label.pack()

    directory_label = tk.Label(root, text="文件夹路径:")
    directory_label.pack()
    directory_entry = tk.Entry(root)
    directory_entry.pack()
    directory_button = tk.Button(root, text="选择文件夹", command=lambda: directory_entry.insert(0, filedialog.askdirectory()))
    directory_button.pack()

    pattern_label = tk.Label(root, text="正则表达式模式:")
    pattern_label.pack()
    pattern_entry = tk.Entry(root)
    pattern_entry.pack()

    replacement_label = tk.Label(root, text="替换规则:")
    replacement_label.pack()
    replacement_entry = tk.Entry(root)
    replacement_entry.pack()

    date_format_label = tk.Label(root, text="日期格式:")
    date_format_label.pack()
    date_format_entry = tk.Entry(root)
    date_format_entry.pack()

    new_suffix_label = tk.Label(root, text="新后缀:")
    new_suffix_label.pack()
    new_suffix_entry = tk.Entry(root)
    new_suffix_entry.pack()

    include_size_var = tk.IntVar()  # 创建 IntVar 变量用于存储复选框状态
    include_size_checkbox = tk.Checkbutton(root, text="包含文件大小", variable=include_size_var)
    include_size_checkbox.pack()

    include_original_date_var = tk.IntVar()
    include_original_date_checkbox = tk.Checkbutton(root, text="包含原始日期", variable=include_original_date_var)
    include_original_date_checkbox.pack()

    include_md5_var = tk.IntVar()
    include_md5_checkbox = tk.Checkbutton(root, text="包含MD5值", variable=include_md5_var)
    include_md5_checkbox.pack()

    include_sha256_var = tk.IntVar()
    include_sha256_checkbox = tk.Checkbutton(root, text="包含SHA256值", variable=include_sha256_var)
    include_sha256_checkbox.pack()

    include_crc32_var = tk.IntVar()
    include_crc32_checkbox = tk.Checkbutton(root, text="包含CRC32值", variable=include_crc32_var)
    include_crc32_checkbox.pack()

    change_original_time_var = tk.IntVar()
    change_original_time_checkbox = tk.Checkbutton(root, text="改变文件原始时间", variable=change_original_time_var)
    change_original_time_checkbox.pack()

    rename_button = tk.Button(root, text="重命名", command=lambda: rename_files_with_gui(
        directory_entry.get(),
        pattern_entry.get(),
        replacement_entry.get(),
        date_format_entry.get(),
        new_suffix_entry.get(),
        include_size_var.get(),
        include_original_date_var.get(),
        include_md5_var.get(),
        include_sha256_var.get(),
        include_crc32_var.get(),
        change_original_time_var.get()
    ))
    rename_button.pack()

    file_listbox = tk.Listbox(root)
    file_listbox.pack()
    file_listbox.bind("<Button-1>", show_file_type)  # 使用具体的鼠标左键单击事件名称

    compare_button = tk.Button(root, text="文件对比", command=lambda: compare_files(filedialog.askfile(), filedialog.askfile()))
    compare_button.pack()

    preview_button = tk.Button(root, text="预览文件", command=lambda: preview_file_content(filedialog.askfile()))
    preview_button.pack()

    copy_button = tk.Button(root, text="复制", command=lambda: copy_file(filedialog.askfile(), filedialog.askdirectory()))
    copy_button.pack()

    cut_button = tk.Button(root, text="剪切", command=lambda: cut_file(filedialog.askfile(), filedialog.askdirectory()))
    cut_button.pack()

    delete_button = tk.Button(root, text="删除", command=lambda: delete_file(filedialog.askfile()))
    delete_button.pack()

    move_button = tk.Button(root, text="移动", command=lambda: move_file(filedialog.askfile(), filedialog.askdirectory()))
    move_button.pack()

    compress_button = tk.Button(root, text="压缩", command=lambda: compress_to_7z(filedialog.askfile(), filedialog.asksavefilename()))
    compress_button.pack()

    decompress_button = tk.Button(root, text="解压", command=lambda: decompress_7z(filedialog.askfile(), filedialog.askdirectory()))
    decompress_button.pack()

    mount_button = tk.Button(root, text="挂载镜像", command=lambda: mount_iso(filedialog.askfile()))
    mount_button.pack()

    keyword_label = tk.Label(root, text="搜索关键字:")
    keyword_label.pack()
    keyword_entry = tk.Entry(root)
    keyword_entry.pack()
    search_button = tk.Button(root, text="搜索", command=lambda: search_files(directory_entry.get(), keyword_entry.get()))
    search_button.pack()

    unlock_button = tk.Button(root, text="解锁文件", command=lambda: unlock_file(filedialog.askfile()))
    unlock_button.pack()

    clean_button = tk.Button(root, text="系统清理", command=lambda: clean_system())
    clean_button.pack()

    optimize_button = tk.Button(root, text="优化软件", command=lambda: optimize_software())
    optimize_button.pack()

    root.mainloop()

if __name__ == "__main__":
    main()


点评

大佬太牛了!我成功运行。  发表于 昨天 07:03
回复

使用道具 举报

22#
发表于 昨天 06:59 | 只看该作者
专业,自信,真诚,大方
回复

使用道具 举报

23#
发表于 昨天 07:10 | 只看该作者
本帖最后由 呆萌鼠 于 2025-2-21 07:12 编辑

21楼代码运行图像,不知道咋用。

点评

我运行不出来,你咋弄的,能不能打包一个  详情 回复 发表于 昨天 10:55
回复

使用道具 举报

24#
发表于 昨天 09:13 | 只看该作者
感觉py打包成单文件一般体积都非常大

点评

就好像拧个螺丝,本来带一把对口的就行,结果是带了一套螺丝刀一样的道理。好处是方便,坏处是多余的多了。  发表于 昨天 09:48
回复

使用道具 举报

25#
发表于 昨天 10:30 | 只看该作者
大佬  这是什么软件
回复

使用道具 举报

26#
 楼主| 发表于 昨天 10:55 | 只看该作者
呆萌鼠 发表于 2025-2-21 07:10
21楼代码运行图像,不知道咋用。

我运行不出来,你咋弄的,能不能打包一个

点评

wwcg.lanzouu.com/iSaxN2ogaogd 密码:huag  详情 回复 发表于 昨天 12:20
回复

使用道具 举报

27#
发表于 昨天 12:20 | 只看该作者
语之男 发表于 2025-2-21 10:55
我运行不出来,你咋弄的,能不能打包一个

wwcg.lanzouu.com/iSaxN2ogaogd  密码:huag

点评

练习数字时钟制作wwcg.lanzouu.com/idF8S2ogf6ji 密码:g8k8  发表于 昨天 12:49
回复

使用道具 举报

28#
发表于 昨天 12:27 | 只看该作者
本帖最后由 BestMiniPE 于 2025-2-21 12:43 编辑

我只会写一点 NSIS. 不过,现在要公布Python打包的奇技淫巧了。pip install pyinstaller 先。Edit Plus 工具菜单 在 C:\Program Files\EditPlus\INI\tool_u.ini。下面是文件内容。食用方法:工具 -->编译。源码存为UTF-8格式。tool_u.ini 内容如下[Tools]
Index=0

[Tools\0]
Count=2
Text=Group 1

[Tools\0\0]
Text=Comp NSIS Script
Command=C:\Program Files\NSIS\MakeNsisW.exe
Argument="$(FileName)"
InitDir=$(FileDir)

[Tools\0\1]
Text=编译Python为Win
Command=C:\Users\Administrator\AppData\Local\Programs\Python\Python312\Scripts\pyinstaller.exe
Argument= -F --windowed --onefile --strip --distpath=. $(FileName)
Action=1
Custom File Type=-18
Extensions=*.*



点评

谢谢大佬!学习学习!  发表于 昨天 12:47
回复

使用道具 举报

29#
发表于 昨天 15:22 | 只看该作者
多谢楼主分享!!!
回复

使用道具 举报

30#
 楼主| 发表于 昨天 16:03 | 只看该作者
这东西不能用,感觉真是可耻
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

本版积分规则

小黑屋|手机版|Archiver|捐助支持|无忧启动 ( 闽ICP备05002490号-1 )

闽公网安备 35020302032614号

GMT+8, 2025-2-22 03:59

Powered by Discuz! X3.3

© 2001-2017 Comsenz Inc.

快速回复 返回顶部 返回列表