我的脚本搜索特定目录中的所有pdf文件,然后从pdf中提取一个id,并在文件中组织pdf。例如我有:
C:\Users\user\Downloads\aa\1.pdf, with id = 3,
C:\Users\user\Downloads\aa\2.pdf, with id = 5,
C:\Users\user\Downloads\aa\3.pdf, with id = 10
我想这样组织它们:
C:\Users\user\Downloads\aa\3\1.pdf
C:\Users\user\Downloads\aa\5\2.pdf
C:\Users\user\Downloads\aa\10\3.pdf
下面的脚本做的工作,但我认为只有最后一个文件输出以下错误:
回溯(最近一次调用):文件“C:\Users\user\Downloads\aa\project.py”,第74行,在操作系统中。rename(source,dest)PermissionError:[WinError 32]该进程无法访问该文件,因为另一个进程正在使用该文件:“C:\Users\user\Downloads\aa\3”。pdf'-
import PyPDF2
import re
import glob, os
import shutil
import sys
from collections import Counter
from collections import defaultdict
class DictList(dict):
def __setitem__(self, key, value):
try:
self[key].append(value)
except KeyError:
super(DictList, self).__setitem__(key, value)
except AttributeError:
super(DictList, self).__setitem__(key, [self[key], value])
files = glob.glob(r'C:\Users\user\Downloads\aa\*.pdf')
gesi_id=[]
dic = DictList()
c = 0
for i in files:
pdfFileObj = open(files[c],'rb')
pdfReader = PyPDF2.PdfFileReader(pdfFileObj)
num_pages = pdfReader.numPages
count = 0
text = ""
while count < num_pages:
pageObj = pdfReader.getPage(count)
count +=1
text += pageObj.extractText()
keywords = []
keywords = re.findall(r'[0-9]\w+', text);
gesi_id.append(keywords[0])
key = str(gesi_id[c])
value = files[c]
dic[key] = value
c=c+1
gesi_id_unique = []
for x in gesi_id:
if x not in gesi_id_unique:
gesi_id_unique.append(x)
c=0
if not gesi_id_unique:
sys.exit()
for i in gesi_id_unique:
dirName = os.path.join('C:\\Users\\user\\Downloads\\aa\\',
str(gesi_id_unique[c]))
c=c+1
if not os.path.exists(dirName):
os.mkdir(dirName)
keys = list(dic)
values = list(dic.values())
k = 0
v = 0
for i in keys:
for val in values[k]:
source = val
dest = os.path.join('C:\\Users\\user\\Downloads\\aa\\',
gesi_id_unique[k], val.rsplit('\\', 1)[-1])
print(gesi_id_unique[k])
print(val.rsplit('\\', 1)[-1])
print("Source: %s" % source)
print("Dest: %s" % dest)
os.rename(source, dest)
k = k+1
首先,我认为由于复制和过去的一些缩进受到干扰,事实上有一部分应该是:
for i in files:
pdfFileObj = open(files[c],'rb')
pdfReader = PyPDF2.PdfFileReader(pdfFileObj)
num_pages = pdfReader.numPages
count = 0
text = ""
while count < num_pages:
pageObj = pdfReader.getPage(count)
count +=1
text += pageObj.extractText()
keywords = []
keywords = re.findall(r'[0-9]\w+', text);
gesi_id.append(keywords[0])
key = str(gesi_id[c])
value = files[c]
dic[key] = value
c=c+1
为了解决这个问题,您只需要通过添加pdfFileObj来关闭当前使用的文件。关闭()
for i in files:
pdfFileObj = open(files[c],'rb')
pdfReader = PyPDF2.PdfFileReader(pdfFileObj)
num_pages = pdfReader.numPages
count = 0
text = ""
while count < num_pages:
pageObj = pdfReader.getPage(count)
count +=1
text += pageObj.extractText()
keywords = []
keywords = re.findall(r'[0-9]\w+', text);
gesi_id.append(keywords[0])
key = str(gesi_id[c])
value = files[c]
dic[key] = value
c=c+1
pdfFileObj.close()
我是C#新手,连接Firebird数据库时遇到问题。我想让我的程序访问Firebird数据库[FDB格式文件]。我有问题,请参见下面的代码: 这段代码允许我读取FDB文件并提取数据。当代码第一次执行时,没有错误或问题,但是当我再次执行时,这个错误会显示出来: 进程无法访问文件“C:\Users\ACC-0001”。FDB’因为它正被另一个进程使用。
下面是使用Ucanaccess Jdbc驱动程序从Microsoft Access文件filename.accdb获取连接的代码。但在运行此代码时,它会抛出异常,就像已经使用的文件一样。 但是我想在其他应用程序使用MSAccess数据库文件时并发地使用它。 当我运行上面的代码时,出现了如下异常: net.ucanaccess.jdbc.ucanaccesssqlexception:UCAEXC::
问题内容: 我的代码用于一个脚本,该脚本查看一个文件夹并删除分辨率为1920x1080的图像。我的问题是我的代码运行时; 我收到此错误消息: 只需确认一下,Python是我计算机上运行的唯一程序。是什么导致此问题,我该如何解决? 问题答案: 您的过程就是打开文件的过程(仍然存在)。您需要先关闭它,然后再删除它。 我不知道PIL是否支持上下文,但是是否支持: 进入之前,请确保删除(并关闭文件)。 如
我是编程新手,我有一个问题。如果我有两个函数,一个创建一个文本文件并写入其中,而另一个打开同一个文本文件并从中读取。 我得到的错误是: 系统伊奥。IOException:'进程无法访问文件'@。txt“因为它正被另一个进程使用。” 我曾尝试为每个功能设置单独的计时器,但仍然不起作用。我认为最好的办法是函数二直到函数一结束才开始。 你能帮我实现这个吗?非常感谢!迈克 源代码:
我刚使用System.io,我不明白为什么我的代码会导致这个异常。我想检查一个目录和一个文件是否存在,如果不存在,我想创建它们。之后,我想在我刚创建的文件上写点东西。在这里它抛出异常。我非常确信,当im试图使用StreamWriter时,创建会导致异常,因为如果该文件已经存在,我不会得到一个执行。此外,当我在一次尝试失败后再次单击调用此funktion的按钮时,没有任何例外,并且一切都运行良好(看
这意味着什么,我能做什么呢?