Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/347.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 将pdf转换为文本而不创建文件_Python_Pdf_Text - Fatal编程技术网

Python 将pdf转换为文本而不创建文件

Python 将pdf转换为文本而不创建文件,python,pdf,text,Python,Pdf,Text,我想从网站上下载pdf文件并处理文本。但是,我不想创建一个pdf文件,然后将其转换为文本。我使用python请求。有没有办法直接在下面的代码之后获取文本 res=requests.get(url,timeout=None) 好的,你至少要创建一个临时文件,这样你就可以 执行您的流程 您可以使用以下代码获取/读取PDF文件并将其转换为文本文件。 这使用了PDFMINER和python3.7 from pdfminer.pdfinterp import PDFResourceManager, PDF

我想从网站上下载pdf文件并处理文本。但是,我不想创建一个pdf文件,然后将其转换为文本。我使用python请求。有没有办法直接在下面的代码之后获取文本

res=requests.get(url,timeout=None)

好的,你至少要创建一个临时文件,这样你就可以 执行您的流程

您可以使用以下代码获取/读取PDF文件并将其转换为文本文件。 这使用了PDFMINER和python3.7

from pdfminer.pdfinterp import PDFResourceManager, PDFPageInterpreter
from pdfminer.converter import HTMLConverter,TextConverter,XMLConverter
from pdfminer.layout import LAParams
from pdfminer.pdfpage import PDFPage
import io

def convert(case,fname, pages=None):
    if not pages:
        pagenums = set()
    else:
        pagenums = set(pages)
    manager = PDFResourceManager()
    codec = 'utf-8'
    caching = True
    output = io.StringIO()
    converter = TextConverter(manager, output, codec=codec, laparams=LAParams())
    interpreter = PDFPageInterpreter(manager, converter)
    infile = open(fname, 'rb')
    for page in PDFPage.get_pages(infile, pagenums, caching=caching, check_extractable=True):
        interpreter.process_page(page)

    convertedPDF = output.getvalue()
    print(convertedPDF)

    infile.close()
    converter.close()
    output.close()
    return convertedPDF
调用上述程序的主要功能:

import os
import converter
import sys, getopt

class ConvertMultiple:
    def convert_multiple(pdf_dir, txt_dir):
        if pdf_dir == "": pdf_dir = os.getcwd() + "\\"  # if no pdfDir passed in
        for pdf in os.listdir(pdf_dir):  # iterate through pdfs in pdf directory
            print("File name is %s", os.path.basename(pdf))
            file_extension = pdf.split(".")[-1]
            print("file extension is %s", file_extension)
            if file_extension == "pdf":
                pdf_file_name = pdf_dir + pdf
                path = 'E:/pdf/' + os.path.basename(pdf)
                print(path)
                text = converter.convert('text', path)  # get string of text content of pdf
                text_file_name = txt_dir + pdf + ".txt"
                text_file = open(text_file_name, "w")  # make text file
                text_file.write(text)  # write text to text file


pdf_dir = "E:/pdf"
txt_dir = "E:/text"
ConvertMultiple.convert_multiple(pdf_dir, txt_dir)
当然,您可以对它进行更多的调整,可能还有更多的改进空间,但这确实有效

只需确保提供临时pdf而不是提供pdf文件夹 直接归档


希望这能帮助你…快乐编码

如果您只需要文本,PyPDF2就可以正常工作

在anaconda终端(或)cmd提示符下安装PyPDF2包

pip安装PyPDF2

您可以使用以下代码获取/读取PDF文件并将其转换为文本文件

import PyPDF2
from PyPDF2 import PdfFileReader, PdfFileWriter
def getTextPDF(pdfFileName,password=''):
    pdf_file=open(pdfFileName,'rb')
    read_pdf=PyPDF2.PdfFileReader(pdf_file)
    if password !='':
        read_pdf.decrypt(password)
    text=[]
    for i in range(0,read_pdf.getNumPages()):
        text.append(read_pdf.getPage(i).extractText())
    return ('\n'.join (text).replace("\n",''))


getText2PDF('0001.pdf')

非常适合我

如果您的pdf文件位于AWS S3(简单存储服务)中,请传递未签名的URL

import boto3 
from PyPDF2 import PdfFileReader 
from io import BytesIO


def extract_PDF(url): #URL where the pdf is stored online

    CF="https://<Bucket_name>.<Website>.com/"
    object_name = url.replace(CF,'')
    bucket_name="<Bucket_name>.<Website>.com"

    s3 = boto3.resource('s3')
    obj = s3.Object(bucket_name, object_name)
    fs = obj.get()['Body'].read()
    pdfFile = PdfFileReader(BytesIO(fs))

    text=""
    for page_no in range(len(pdfFile.pages)):
        page = pdfFile.getPage(page_no)
        text += page.extractText()
    text = text.replace('\n','')
    text = text.replace('  ','')
    return text
导入boto3
从PyPDF2导入PdfileReader
从io导入字节io
def extract_PDF(url):#在线存储PDF的url
CF=”https://..com/"
对象名称=url.replace(CF“”)
bucket_name=“…com”
s3=boto3.resource('s3')
obj=s3.Object(bucket\u name,Object\u name)
fs=obj.get()['Body'].read()
Pdfile=PdfileReader(字节(fs))
text=“”
对于范围内的页码(len(pdfFile.pages)):
page=pdfFile.getPage(页码)
text+=page.extractText()
text=text.replace('\n','')
text=文本。替换(“”,“”)
返回文本

可能的重复我想说它不是^的重复,因为OP在问“我能做这个吗…?”,答案是否定的。如果你的问题得到了回答,请回答。可能对这个问题更有帮助的是删除与S3有关的任何内容,这会混淆相关内容,并重写此内容以请求常规URL,根据使用
requests.get()
方法的原始问题。