python Django中如何区分上传的PDF通过正则表达式提取数据

python Django中如何区分上传的PDF通过正则表达式提取数据,python,django,pdf,pdfminer,pdf-extraction,Python,Django,Pdf,Pdfminer,Pdf Extraction,这里是上传的PDF文件,它会将其转换成文本。转换成文本后,我使用正则表达式从PDF获取一些特定数据。现在有各种各样的pdf,我必须为每个pdf使用不同类型的正则表达式。但我面临的问题是如何区分if条件中的pdf,如下所示。我在这里所做的只是第一个if条件。如何将pdf传递到我所创建的特定正则表达式中。或者有没有其他方法可以做到这一点?我只是想为一些特定的数据建立pdf提取器 def upload(request): if request.method == 'POST':

这里是上传的PDF文件,它会将其转换成文本。转换成文本后,我使用正则表达式从PDF获取一些特定数据。现在有各种各样的pdf,我必须为每个pdf使用不同类型的正则表达式。但我面临的问题是如何区分if条件中的pdf,如下所示。我在这里所做的只是第一个if条件。如何将pdf传递到我所创建的特定正则表达式中。或者有没有其他方法可以做到这一点?我只是想为一些特定的数据建立pdf提取器

def upload(request):
    if request.method == 'POST':
        form = PoForm(request.POST, request.FILES)
        if form.is_valid():
            form.save()
            file_name = form.cleaned_data['pdf'].name
            print(form.cleaned_data['pdf'].name)
            text=convert_pdf_to_txt(file_name)


            text=text.replace('\n','')
            print(text)
            path = 'media/pos/pdfs/{}'.format(file_name)
            print(path)
            basename = os.path.basename(path)


            if file_name == basename:

                print(basename)
                print(file_name)
                regex_Quantity ='Quantity:\s?([0-9]+)'
                regex_style_no ='No:\s\s\s\s?([0-9]+)'


            elif file_name == basename:
                print("print2")
                print(basename)
                regex_Quantity = 'Total Units\s?([0-9\,]+)'
                regex_style_no = 'Number:\s?([0-9]+)'


            elif file_name == basename:
                print(basename)
                print("print3")
                regex_Quantity ='PO\s?([0-9\.]+)'
                regex_style_no = 'Article-No.:\s?([0-9]+)'

要根据内容获取目标,您应该使用
search
,如下所示:

from re import search

content = get_your_pdf_content_or_particular_string()
if search('your_regex', content):
   do_something()
elif search('your_other_regex', content):
   do_something_else()
elif ...

如果正则表达式与内容的任何部分都不匹配,搜索将返回
None
,如果匹配,搜索将返回
MatchObject
,您可以从中以
MatchObject.group(0)的形式访问在内容中找到的实际正则表达式
如果您愿意,可以在代码中使用它。

首先,我不知道您想通过在下面的if-elif中声明完全相同的表达式来实现什么。这更像是一个问题。如果
if
中的第一个表达式为真,则跳过其余代码,因为它获取第一个真表达式并执行
if
中指定的代码。当
if
表达式为false时,它会转到
elif
并检查表达式是否为True,并且过程会重复。实际上,我想从pdf自动收集特定数据,而我只是通过正则表达式将pdf上传到Django项目中。但它只适用于一个pdf,我的意思是它只适用于第一个条件。我的正则表达式对于每个不同的PDF都是不同的。我无法分辨如何进入elif状态。对于3个类别类型的pdf,这里有3个条件,每个条件都有每个pdf的正则表达式,以从pdf中提取特定值。它可以是更多的PDF和更多的条件。我希望您在继续开发应用程序之前了解我的观点,请阅读。我的意思是,很明显,您才刚刚开始您的编程之旅,所以最好熟悉基础知识。祝你好运@嘿,你不明白我的观点,或者你不理解我的问题。非常感谢。做了一个项目,上传任何类型的pdf,但你有一些正则表达式为每一个pdf。当你上传它并将其存储到项目目录中时,你可以从那里抓取上传的PDF并运行一个函数将其转换为文本,然后将其放入正则表达式中以提取所需的数据。现在告诉我如何将pdf处理为它自己的特定正则表达式。你的意思是像这样的伪代码吗
如果pdf包含这个正则表达式,做点什么elif pdf包含其他正则表达式,做点其他的吗
?每个pdf都有很多正则表达式,但在搜索函数中,我只能添加一个正则表达式,对吗?我想结合我的每个pdf的正则表达式来同时运行。还有别的办法吗?顺便说一句,谢谢你的努力。我真的很感激。是的,搜索函数为作为参数提供的正则表达式获取匹配项。我不知道你所说的
组合我的每个pdf的正则表达式以同时运行是什么意思
我建议你看一些
python re
速成课程,它可以为你的问题提供答案。如果你觉得这很有用,只需点击向上箭头:)搜索功能只能携带一个正则表达式,但我有很多正则表达式用于一个pdf。那么如何处理呢?在你的脑海里还有其他的方法吗?当然,如果它解决了我的问题,我会打电话的。我只需要调用不同正则表达式的搜索函数。顺便说一句,这不是“做我的家庭作业”堆栈,如果有人在评论中帮助你-点击“喜欢”按钮。不要期望你所制造的问题有一个完整的解决方案。我可以给你资源,其余的取决于你的技能