python - 如何关闭使用 pdfquery 打开的文件,它阻止了 pdf 文件?
问题描述
我尝试重命名使用 pdfquery 打开的 pdf 文件,从数据中提取 pdf 文件的名称。pdfquery 锁定文件并防止重命名。没有关闭方法来解锁文件。
我尝试“删除 pdf”并在重命名之前强制关闭文件,但它不起作用。(在windows上试过,不知道linux是否有效)
import os
import pdfquery
def is_pdf(file):
if os.path.splitext(file.lower())[1] == '.pdf':
return True
pdf_files = os.listdir('./pages')
for pdf_file in filter(is_pdf, pdf_files):
if is_pdf(pdf_file):
print(pdf_file)
pdf = pdfquery.PDFQuery(os.path.join('pages', pdf_file))
pdf.load()
for e in pdf.tree.iter():
text = e.text
if text:
text = text.replace(' ', '')
if text[0:7] == '4002629':
#del pdf
os.rename(os.path.join('pages', pdf_file), '{}.pdf'.format(text))
期望重命名的文件,但得到:
Traceback (most recent call last):
File "C:\Users\Administrator\Desktop\PDFs_aufbereiten\pdf_pages_rename.py", line 22, in <module>
os.rename(os.path.join('pages', pdf_file), '{}.pdf'.format(text))
PermissionError: [WinError 32] Der Prozess kann nicht auf die Datei zugreifen, da sie von einem anderen Prozess verwendet wird: 'pages\\xxxxxxxxxxxxxxxxxxxx.pdf' -> 'xxxxxxxxxxxxx.pdf'
解决方案
这也应该有效:
pdf.file.close()
推荐阅读
- c# - 如何使用反射从实例中获取私有字典
- wordpress - 缺少 JPG 文件会减慢页面加载速度
- kotlin - 如何从 WebFlux 处理程序返回 HTML 页面
- linux - ImageMagick convert -crop 返回相同的图像
- google-sheets - Google 表格到 Google Data Studio - 年份比较组合图
- servicestack - 使用 ServiceStack 中的自定义身份验证提供程序的 ArgumentNullException
- css - css如何在响应时在元素上有边距
- javascript - JavaScript 中的用户输入和解析
- ansible - 如何将 aruba_command 与期望指令一起使用?
- c# - c#和进程控制