import os import io import tkinter as tk import tkinter.filedialog as filedialog from pdfminer.pdfinterp import PDFResourceManager, PDFPageInterpreter from pdfminer.converter import TextConverter from pdfminer.layout import LAParams from pdfminer.pdfpage import PDFPage def convert_pdf_to_txt(path): rsrcmgr = PDFResourceManager() laparams = LAParams() outfp = io.StringIO() device = TextConverter(rsrcmgr, outfp, laparams=laparams) fp = open(path, 'rb') interpreter = PDFPageInterpreter(rsrcmgr, device) password = "" maxpages = 0 caching = True pagenos = set() for page in PDFPage.get_pages(fp, pagenos, maxpages=maxpages, password=password, caching=caching, check_extractable=True): interpreter.process_page(page) fp.close() device.close() text = outfp.getvalue() outfp.close() return text def select_folder(): folder_path = filedialog.askdirectory() if folder_path: label.config(text=f'已选择文件夹:{folder_path}') convert_folder(folder_path) def convert_folder(folder_path): for file_name in os.listdir(folder_path): if file_name.endswith('.pdf'): pdf_path = os.path.join(folder_path, file_name) text = convert_pdf_to_txt(pdf_path) txt_name = file_name.replace('.pdf', '.txt') txt_path = os.path.join(folder_path, txt_name) with open(txt_path, 'w', encoding='utf-8') as f: f.write(text) label.config(text='转换完成!') root = tk.Tk() root.title('PDF转换器') root.geometry('300x100') button = tk.Button(root, text='选择文件夹', command=select_folder) button.pack(pady=10) label = tk.Label(root, text='请点击按钮选择文件夹') label.pack() root.mainloop()上述代码在控制台输出响应时间
时间: 2024-01-15 20:02:55 浏览: 157
很抱歉,我无法在控制台输出响应时间,因为这段代码是一个基于Tkinter GUI库的图形界面程序,它不适用于控制台。如果你想要测试响应时间,可以使用Python内置的time模块来计算程序执行时间。例如,在convert_pdf_to_txt()函数中加入以下代码来测试执行时间:
```
import time
start_time = time.time()
# 原有的代码
end_time = time.time()
print(f'执行时间:{end_time - start_time}秒')
```
这样就可以在控制台输出程序的执行时间了。
相关问题
帮我解析一下代码from scapy.all import * from queue import Queue import os import sys import time from tkinter import * import tkinter as tk from tkinter.ttk import * from tkinter import ttk import time from datetime import datetime import tkinter.messagebox import tkinter.font as tkFont from scapy.arch.common import compile_filter #from scapy.layers.http import HTTPRequst from demo2 import session_GUI from demo3 import track_tcp_GUI # show_interfaces() show_interfaces()
这段代码导入了很多Python模块:scapy、queue、os、sys、time和tkinter等。其中,scapy是一个强大的网络包生成和解析库,queue提供了队列的数据结构,os是操作系统接口,sys包含了一些有系统级别的变量和函数,time提供了时间相关的函数,而tkinter则是Python的一个GUI工具包,用于开发图形界面。同时,代码还用到了tkinter的一些其他模块,如ttk、messagebox和font等。最后,代码中还调用了Scapy库的compile_filter函数,用于编译并返回BPF过滤器。
from tkinter import * from pdfminer.pdfparser import PDFParser from pdfminer.pdfdocument import PDFDocument from pdfminer.pdfinterp import PDFResourceManager, PDFPageInterpreter from pdfminer.converter import PDFPageAggregator, TextConverter from pdfminer.layout import LAParams, LTTextBoxHorizontal from pdfminer.pdfpage import PDFPage class PDFViewer: def init(self, master): self.master = master master.title("PDF Viewer") # 创建文本框和滚动条 self.text = Text(master) self.scrollbar = Scrollbar(master, command=self.text.yview) self.text.configure(yscrollcommand=self.scrollbar.set) self.text.pack(side=LEFT, fill=BOTH, expand=True) self.scrollbar.pack(side=RIGHT, fill=Y) # 打开 PDF 文件 fp = open('x1/2023凯程333教育综合应试解析-外国教育史(OCR).pdf', 'rb') # 创建 PDF 解析器 parser = PDFParser(fp) # 创建 PDF 文档对象 document = PDFDocument(parser) # 获取页面布局参数 laparams = LAParams() # 创建 PDF 资源管理器 rsrcmgr = PDFResourceManager() # 创建聚合器对象 device = PDFPageAggregator(rsrcmgr, laparams=laparams) # 创建 PDF 解释器 interpreter = PDFPageInterpreter(rsrcmgr, device) # 处理每一页 PDF 页面 for page in PDFPage.create_pages(document): interpreter.process_page(page) # 获取页面布局 layout = device.get_result() # 提取每一页的文本内容 for x in layout: if isinstance(x, LTTextBoxHorizontal): text = x.get_text().strip() self.text.insert(END, text + '\n') # 关闭 PDF 文件 fp.close() root = Tk() pdf_viewer = PDFViewer(root) root.mainloop()上述文本框添加保存到本地功能
要给上述的 PDFViewer 类添加保存到本地的功能,可以在 init 方法中添加一个保存按钮,并为该按钮设置一个响应函数,代码如下:
```
class PDFViewer:
def __init__(self, master):
self.master = master
master.title("PDF Viewer")
# 创建文本框和滚动条
self.text = Text(master)
self.scrollbar = Scrollbar(master, command=self.text.yview)
self.text.configure(yscrollcommand=self.scrollbar.set)
self.text.pack(side=LEFT, fill=BOTH, expand=True)
self.scrollbar.pack(side=RIGHT, fill=Y)
# 创建保存按钮
self.save_button = Button(master, text="Save", command=self.save_file)
self.save_button.pack()
# 打开 PDF 文件
self.fp = open('x1/2023凯程333教育综合应试解析-外国教育史(OCR).pdf', 'rb')
# 创建 PDF 解析器
self.parser = PDFParser(self.fp)
# 创建 PDF 文档对象
self.document = PDFDocument(self.parser)
# 获取页面布局参数
self.laparams = LAParams()
# 创建 PDF 资源管理器
self.rsrcmgr = PDFResourceManager()
# 创建聚合器对象
self.device = PDFPageAggregator(self.rsrcmgr, laparams=self.laparams)
# 创建 PDF 解释器
self.interpreter = PDFPageInterpreter(self.rsrcmgr, self.device)
# 处理每一页 PDF 页面
for page in PDFPage.create_pages(self.document):
self.interpreter.process_page(page)
# 获取页面布局
self.layout = self.device.get_result()
# 提取每一页的文本内容
for x in self.layout:
if isinstance(x, LTTextBoxHorizontal):
text = x.get_text().strip()
self.text.insert(END, text + '\n')
def save_file(self):
# 获取文本框中的内容
text = self.text.get("1.0", END)
# 弹出文件保存对话框
file_name = filedialog.asksaveasfilename(defaultextension=".txt", filetypes=[("Text files", "*.txt")])
# 如果用户选择了保存文件的路径,则将文本写入文件
if file_name:
with open(file_name, "w", encoding="utf-8") as f:
f.write(text)
def __del__(self):
# 关闭 PDF 文件
self.fp.close()
root = Tk()
pdf_viewer = PDFViewer(root)
root.mainloop()
```
在上述代码中,我们新增了一个 save_button 按钮,并将其响应函数设为 save_file。该函数会弹出一个文件保存对话框,让用户选择保存的文件路径和文件名,然后将文本框中的内容写入文件中。注意,在类的析构函数中,我们需要关闭 PDF 文件。
阅读全文