鱼C论坛

 找回密码
 立即注册
查看: 199|回复: 3

做一个文档整理程序

[复制链接]
发表于 2024-10-15 13:14:23 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

x
想做一个文档整理程序
1,tkinter做界面,启动程序,进入gui界面
2.在界面第一行显示 标签label,“请选择需要整理的文件类型”
3.在界面第二行,单选框1,后面标签为“.pdf",单选框2,后面标签为”.xlsx"
4.在界面第三行,按钮button,文字为“请选择需要提取数据的文件夹,可选多个”
点击后,可以一直选择文件夹,指导确认结束为止
5.选中的文件夹都在下面的行显示,标明选中了哪些文件夹
6.在界面第十行,按钮button,文字为“请选择提取数据归并的文件夹”,
点击侯,把选中的文件夹在下面的行显示
7.最下面按钮button,文件为“运行”,根据选定的文件类型的后缀,去指明需要提取数据的文件夹里找到所有符合的文件,
并到归并文件夹中新建一个文件夹如“pdf”,放置所有文件,并做一个excel,每一行列一个文件全名,在第二列做文件的超链接。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2024-10-15 13:14:45 | 显示全部楼层
好的,你的需求可以用Python和tkinter库以及一些文件操作库(如os和shutil)来实现。我为你提供一个简化示例代码,帮助你做一个文档整理程序。这个示例实现了基本的界面和文件操作功能。
import os
import shutil
import tkinter as tk
from tkinter import filedialog, messagebox

def select_folders():
    selected_dirs = filedialog.askdirectory(mustexist=True)
    if selected_dirs:
        folder_list.extend(selected_dirs)
        folders_display.set('\n'.join(folder_list))

def select_merge_folder():
    merge_dir = filedialog.askdirectory(mustexist=True)
    if merge_dir:
        merge_folder_display.set(merge_dir)

def run_process():
    file_type = selected_file_type.get()
    if not folder_list or not merge_folder_display.get():
        messagebox.showwarning("警告", "请选择有效的文件夹")
        return

    target_folder_name = "pdf" if file_type == ".pdf" else "xlsx"
    target_folder_path = os.path.join(merge_folder_display.get(), target_folder_name)

    os.makedirs(target_folder_path, exist_ok=True)

    file_list = []
    for folder in folder_list:
        for root, _, files in os.walk(folder):
            for file in files:
                if file.endswith(file_type):
                    full_path = os.path.join(root, file)
                    shutil.copy(full_path, target_folder_path)
                    file_list.append((file, os.path.abspath(full_path)))

    excel_filepath = os.path.join(merge_folder_display.get(), f"files_list_{target_folder_name}.xlsx")
    
    try:
        import openpyxl
        workbook = openpyxl.Workbook()
        sheet = workbook.active
        for row_num, (file_name, file_path) in enumerate(file_list, start=1):
            sheet.cell(row=row_num, column=1, value=file_name)
            sheet.cell(row=row_num, column=2).hyperlink = file_path
            sheet.cell(row=row_num, column=2, value="打开")
        workbook.save(excel_filepath)
        messagebox.showinfo("完成", f"文件已整理到 {target_folder_path},Excel 表已生成")
    except ImportError:
        messagebox.showerror("错误", "需要安装 openpyxl 模块")

app = tk.Tk()
app.title("文档整理程序")

selected_file_type = tk.StringVar(value=".pdf")

tk.Label(app, text="请选择需要整理的文件类型").grid(row=0, column=0, columnspan=2)

tk.Radiobutton(app, text=".pdf", variable=selected_file_type, value=".pdf").grid(row=1, column=0)
tk.Radiobutton(app, text=".xlsx", variable=selected_file_type, value=".xlsx").grid(row=1, column=1)

folder_list = []
folders_display = tk.StringVar()
tk.Button(app, text="请选择需要提取数据的文件夹,可选多个", command=select_folders).grid(row=2, column=0, columnspan=2)
tk.Label(app, textvariable=folders_display, anchor="w", justify="left").grid(row=3, column=0, columnspan=2)

merge_folder_display = tk.StringVar()
tk.Button(app, text="请选择提取数据归并的文件夹", command=select_merge_folder).grid(row=9, column=0, columnspan=2)
tk.Label(app, textvariable=merge_folder_display, anchor="w", justify="left").grid(row=10, column=0, columnspan=2)

tk.Button(app, text="运行", command=run_process).grid(row=11, column=0, columnspan=2)

app.mainloop()

### 注意事项:

1. 此代码中需要安装 `openpyxl` 模块来处理 Excel 文件,可通过`pip install openpyxl`来安装。
2. 代码结构和功能进行了简化,具体逻辑可根据需要自行完善,比如错误处理、更多文件类型支持等。
3. 提供的示例代码只是基本功能演示,实际环境中使用时请注意完善界面和逻辑的细节。

以上回复来自 FishC AI 小助理,如未能正确解答您的问题,请继续追问。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2024-10-15 13:28:35 | 显示全部楼层
Exception in Tkinter callback
Traceback (most recent call last):
  File "C:\Users\Administrator\AppData\Local\Programs\Python\Python312\Lib\tkinter\__init__.py", line 1967, in __call__
    return self.func(*args)
           ^^^^^^^^^^^^^^^^
  File "D:\PYTHON_NEW\pack20240926\pythonProject1\文档整理程序.py", line 34, in run_process
    shutil.copy(full_path, target_folder_path)
  File "C:\Users\Administrator\AppData\Local\Programs\Python\Python312\Lib\shutil.py", line 435, in copy
    copyfile(src, dst, follow_symlinks=follow_symlinks)
  File "C:\Users\Administrator\AppData\Local\Programs\Python\Python312\Lib\shutil.py", line 262, in copyfile
    with open(dst, 'wb') as fdst:
         ^^^^^^^^^^^^^^^
PermissionError: [Errno 13] Permission denied: 'E:/333\\pdf\\HG/T 20538-2016 衬塑钢管和管件选用系列.pdf'

报错了
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2024-10-15 13:28:45 | 显示全部楼层
颂风侯 发表于 2024-10-15 13:28
Exception in Tkinter callback
Traceback (most rec ...


这个错误提示说明你的程序在尝试复制文件到目标文件夹时,遇到了权限问题。通常有几个原因可能导致这个错误,以及相应的解决方案:

1. **目标文件夹没有写入权限**:确保你有权限向目标文件夹(例如"E:/333/pdf")写入。右键点击该文件夹,选择“属性”,然后查看“安全”选项卡中的权限设置。

2. **文件是只读的**:确认文件本身没有设置为只读。右键单击文件,选择“属性”,检查是否勾选了“只读”属性。

3. **目标文件已存在且不可覆盖**:脚本可能试图覆盖一个现有文件且没有权限。你可以选择在复制前删除目标位置的同名文件,或者改变程序逻辑防止覆盖。

4. **路径中使用的是反斜杠和正斜杠混用**:虽然Python一般能处理,但确保路径分隔符一致有利于避免潜在的问题。

为了解决此问题,你可以尝试以下修改:

- 确保目标文件夹路径是绝对路径,并确保它是适合创建新文件的地方。
- 运行程序时,在命令提示符或者终端中以管理员身份运行。(Windows下右键命令提示符,选择“以管理员身份运行”)
- 查看和修改文件夹和文件的权限,确保你有写权限。
- 修改代码中的路径拼接,使用`os.path.join`来确保路径是正确格式。

例如,改变路径拼接方式:
target_folder_path = os.path.join(target_folder, file_type.lower())

仔细检查以上步骤,看看能否解决你的问题。如需要进一步帮助,请确保详细描述你的设置和代码片段。

以上回复来自 FishC AI 小助理,如未能正确解答您的问题,请继续追问。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

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

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2025-2-24 18:16

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

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