您当前的位置:首页 > 计算机 > 编程开发 > Python

测试专用:Python生成指定大小和格式的文件

时间:08-27来源:作者:点击数:

测试专用:Python生成指定大小和格式的文件

import os
import tkinter as tk
from tkinter import ttk, filedialog, messagebox
from tkinter.font import Font
class FileGeneratorGUI:
    def __init__(self):
        self.window = tk.Tk()
        self.window.title("文件生成器")
        self.window.geometry("600x500")
        self.window.configure(bg='#f0f0f0')
         
        # 设置样式
        style = ttk.Style()
        style.configure('TLabel', font=('Microsoft YaHei UI', 10), padding=5)
        style.configure('TEntry', padding=5)
        style.configure('TButton', font=('Microsoft YaHei UI', 10), padding=5)
        style.configure("Custom.Horizontal.TProgressbar", thickness=20)
         
        # 创建主框架
        main_frame = ttk.Frame(self.window, padding="20")
        main_frame.grid(row=0, column=0, sticky=(tk.W, tk.E, tk.N, tk.S))
         
        # 创建标题
        title_font = Font(family='Microsoft YaHei UI', size=16, weight='bold')
        title_label = tk.Label(main_frame, text="文件生成器", font=title_font, bg='#f0f0f0')
        title_label.grid(row=0, column=0, columnspan=3, pady=20)
         
        # 创建输入框和标签
        ttk.Label(main_frame, text="文件大小(MB):").grid(row=1, column=0, sticky=tk.W)
        self.size_entry = ttk.Entry(main_frame, width=30)
        self.size_entry.grid(row=1, column=1, padx=10, pady=10)
         
        ttk.Label(main_frame, text="文件格式(例如: .txt):").grid(row=2, column=0, sticky=tk.W)
        self.format_entry = ttk.Entry(main_frame, width=30)
        self.format_entry.grid(row=2, column=1, padx=10, pady=10)
         
        # 输出路径选择
        ttk.Label(main_frame, text="输出路径:").grid(row=3, column=0, sticky=tk.W)
        self.path_var = tk.StringVar()
        self.path_entry = ttk.Entry(main_frame, textvariable=self.path_var, width=30)
        self.path_entry.grid(row=3, column=1, padx=10, pady=10)
         
        self.browse_btn = ttk.Button(main_frame, text="浏览", command=self.browse_path)
        self.browse_btn.grid(row=3, column=2, padx=5)
         
        # 生成按钮
        self.generate_btn = ttk.Button(main_frame, text="生成文件", command=self.generate_file, style='TButton')
        self.generate_btn.grid(row=4, column=0, columnspan=3, pady=30)
         
        # 进度条
        self.progress = ttk.Progressbar(main_frame, length=400, mode='determinate', 
                                      style="Custom.Horizontal.TProgressbar")
        self.progress.grid(row=5, column=0, columnspan=3, pady=20)
         
        # 状态标签
        self.status_var = tk.StringVar()
        self.status_label = ttk.Label(main_frame, textvariable=self.status_var)
        self.status_label.grid(row=6, column=0, columnspan=3)
         
    def browse_path(self):
        directory = filedialog.askdirectory()
        self.path_var.set(directory)
         
    def generate_file(self):
        try:
            self.generate_btn.configure(state='disabled')
            self.status_var.set("正在生成文件...")
             
            size = float(self.size_entry.get())
            file_format = self.format_entry.get()
            output_path = self.path_var.get()
             
            if not size or not file_format or not output_path:
                messagebox.showerror("错误", "请填写所有必要信息!")
                return
                 
            if not file_format.startswith('.'):
                file_format = '.' + file_format
                 
            filename = f"generated_file_{size}MB{file_format}"
            full_path = os.path.join(output_path, filename)
             
            # 生成文件
            bytes_size = int(size * 1024 * 1024)  # 转换为字节
            with open(full_path, 'wb') as f:
                chunk_size = 1024 * 1024  # 1MB chunks
                chunks = bytes_size // chunk_size
                 
                self.progress['maximum'] = chunks
                 
                for i in range(chunks):
                    f.write(os.urandom(chunk_size))
                    self.progress['value'] = i + 1
                    self.status_var.set(f"已完成: {int((i+1)/chunks*100)}%")
                    self.window.update()
                     
                # 处理剩余字节
                remaining = bytes_size % chunk_size
                if remaining:
                    f.write(os.urandom(remaining))
             
            messagebox.showinfo("成功", f"文件已生成:\n{full_path}")
            self.progress['value'] = 0
            self.status_var.set("")
             
        except ValueError:
            messagebox.showerror("错误", "请输入有效的文件大小!")
        except Exception as e:
            messagebox.showerror("错误", f"生成文件时出错:{str(e)}")
        finally:
            self.generate_btn.configure(state='normal')
             
    def run(self):
        self.window.mainloop()
 
if __name__ == "__main__":
    app = FileGeneratorGUI()
    app.run()

通过网盘分享的文件:生成指定大小格式的文件.exe

链接: https://pan.baidu.com/s/11gO1LigDTs1lvnFSKJ5sog?pwd=hzhz 提取码: hzhz

方便获取更多学习、工作、生活信息请关注本站微信公众号城东书院 微信服务号城东书院 微信订阅号
推荐内容
相关内容
栏目更新
栏目热门
本栏推荐