繁体   English   中英

重命名目录中的所有 PDF 时出现权限错误

[英]Permission Error when Renaming all PDFs in a directory

我正在创建一个程序,它将根据内容重命名特定目录中的一系列 PDF。 我已经将内容提取到一个字符串中,但是 os.rename() 无法更改名称,因为该文件已经打开。 我找到了一个几乎相同的解决方案,但我无法正确实施它。 我觉得我的功能非常接近完美,但我不知道将 load_pdf.close() 放在哪里,或者我是否需要用不同的方式来表达它。 无论我把它放在哪里,要么抛出相同的错误,要么抛出一些其他会导致某些失败的错误。

import PyPDF2
import os

for file_name in os.listdir('upload_12.5.22_test'):
    load_pdf = open('C:/Users/Jake/Documents/upload_12.5.22_test/'+file_name,'rb')
    read_pdf = PyPDF2.PdfFileReader(load_pdf)
    page_count = read_pdf.getNumPages()
    data_page = read_pdf.getPage(0)
    page_content = data_page.extractText()
    page_content = page_content.replace('\n','')
    page_content = page_content.split('reports.')
    del page_content[0:1]
    p_c_str = ''.join(page_content)
    p_c_str = p_c_str.strip()
    p_c_str = p_c_str[:-6]
    p_c_str = p_c_str + " agreement"
    load_pdf.close()
    os.rename('C:/Users/Jake/Documents/upload_12.5.22_test/'+file_name, 'C:/Users/Jake/Documents/upload_12.5.22_test/'+p_c_str+".pdf")

错误:


Traceback (most recent call last):
  File "C:\Users\Jake\Documents\progam1.py", line 30, in <module>
    os.rename('C:/Users/Jake/Documents/upload_12.5.22_test/'+file_name, 'C:/Users/Jake/Documents/upload_12.5.22_test/'+p_c_str+".pdf")
PermissionError: [WinError 32] The process cannot access the file because it is being used by another process: 'C:/Users/Jake/Documents/upload_12.5.22_test/First M Last agreement.pdf' -> 'C:/Users/Jake/Documents/upload_12.5.22_test/First Last agreement.pdf'
[Finished in 456ms]

更新:我找到了这个解决方案,它似乎正在解决这个问题。 所以,我调用 os.rename() 不正确,并试图更改活动文件目录。 因此,我已将所有内容移动到一个目录中以消除链接到直接源的任何错误,但它仍然抛出完全相同的错误,所以我回到了我开始的地方。

import PyPDF2
import os

for file_name in os.listdir():
    load_pdf = open(file_name,'rb')
    read_pdf = PyPDF2.PdfFileReader(load_pdf)
    page_count = read_pdf.getNumPages()
    data_page = read_pdf.getPage(0)
    page_content = data_page.extractText()
    page_content = page_content.replace('\n','')
    page_content = page_content.split('reports.')
    del page_content[0:1]
    p_c_str = ''.join(page_content)
    p_c_str = p_c_str.strip()
    p_c_str = p_c_str[:-6]
    p_c_str = p_c_str + " agreement"
    load_pdf.close()
    os.rename(file_name, p_c_str+".pdf")

错误:

Traceback (most recent call last):
  File "C:\Users\Jake\Documents\Work Projects\Python\Contract Extraction\upload_12.5.22_test\contract_extraction_testing_2.py", line 28, in <module>
    os.rename(file_name, p_c_str+".pdf")
PermissionError: [WinError 32] The process cannot access the file because it is being used by another process: 'Alan R Diaz agreement.pdf' -> 'Alan Diaz agreement.pdf'
[Finished in 205ms]

我的建议是使用上下文管理器,它会在您读完后立即关闭文件:

with open('C:/Users/Jake/Documents/upload_12.5.22_test/'+file_name,'rb') as load_pdf:
    read_pdf = PyPDF2.PdfFileReader(load_pdf)

但是,您的代码应该如图所示是正确的,因为您在尝试重命名文件之前关闭了该文件。 正如其他人在评论中所说,如果该文件在任何其他进程中打开,Windows 不会让您重命名它,因此最可能的解决方案是关闭其他应用程序甚至重新启动。

感谢这里的伟大建议,我真的很感激帮助。 我能够让它在带有 Fedora 的 VBox 上运行,以消除任何 Windows 恶作剧,我相信这也将有利于我未来的编码工作。 我运行的最终版本如下:

from PyPDF2 import PdfMerger, PdfReader
import PyPDF2
import os

today = '/upload 12.9.22/'

for file_name in os.listdir('/home/jake/Documents/WEEKLY_UPLOAD'+today):
    read_pdf = PyPDF2.PdfReader('/home/jake/Documents/WEEKLY_UPLOAD'+today+file_name,'rb')
    page_count = read_pdf.getNumPages()
    data_page = read_pdf.getPage(0)
    page_content = data_page.extractText()
    page_content = page_content.replace('\n','')
    page_content = page_content.split('reports.')
    del page_content[0:1]
    p_c_str = ''.join(page_content)
    p_c_str = p_c_str.strip()
    p_c_str = p_c_str[:-6]
    new_name = p_c_str + " agreement.pdf"
    os.rename('/home/jake/Documents/WEEKLY_UPLOAD'+today+file_name, '/home/jake/Documents/WEEKLY_UPLOAD'+today+new_name)
```

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM