首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >如何关闭pdfquery打开的文件,它阻塞了pdf- file?

如何关闭pdfquery打开的文件,它阻塞了pdf- file?
EN

Stack Overflow用户
提问于 2019-05-10 20:37:13
回答 2查看 184关注 0票数 0

我尝试用pdfquery重命名pdf文件,从数据中提取pdf文件的名称。pdfquery锁定文件并阻止重命名。没有用于解锁文件的close方法。

我试图'del pdf‘并强制在重命名前关闭文件,但它不起作用。(在windows上尝试过,不知道linux是否正常工作)

代码语言:javascript
运行
复制
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))

需要重命名的文件,但得到的却是:

代码语言:javascript
运行
复制
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'
EN

回答 2

Stack Overflow用户

发布于 2019-05-11 01:40:25

该代码可以在linux上运行,所以pdfquery或pdfquery使用的模块只在windows上导致错误。我在https://github.com/jcushman/pdfquery/issues/75上打开了一个问题,如果我得到了修复或解决方法,我会更新这篇文章。

解决方法在使用pdfquery.PDFQuery之前由自己的代码打开/关闭文件(感谢nedbat):

代码语言:javascript
运行
复制
import os
import pdfquery


def is_pdf(file):
    if os.path.splitext(file.lower())[1] == '.pdf':
        return True


rename_files = []
pdf_files = os.listdir('./pages')
for pdf_file in filter(is_pdf, pdf_files):
    print(pdf_file)
    with open(os.path.join('pages', pdf_file), 'rb') as myfile:
        pdf = pdfquery.PDFQuery(myfile)
        pdf.load()
        for e in pdf.tree.iter():
            text = e.text
            if text:
                text = text.replace(' ', '')
                if text[0:7] == '4002629':
                    rename_files.append(
                        (pdf_file, '{}.pdf'.format(text))
                    )
                    break

for oldname, newname in rename_files:
    os.rename(os.path.join('pages', oldname),
              os.path.join('pages', newname)
              )
票数 0
EN

Stack Overflow用户

发布于 2020-04-25 03:12:00

这也应该行得通:

代码语言:javascript
运行
复制
pdf.file.close()
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/56077886

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档