在Python中创建一组独立列表的主列表

2024-10-05 13:34:07 发布

您现在位置:Python中文网/ 问答频道 /正文

我从PDF中提取了文本数据,并使用split将其划分为单独的页面,然后将这些页面附加到一个名为pages的空列表中。但是,这会导致页面成为一个对象,每个页面只包含一大堆单独的列表对象。你知道吗

我想要的是一个包含所有这些独立列表对象的主列表,这样当我检查打印(类型(页面))时,我得到一个列表,而不是单个列表的长打印输出。你知道吗

    #  creating a pdf File object of original pdf 
    pdfFileObj = open(origFileName, 'rb')  
    # creating a pdf Reader object 
    pdfReader = PyPDF2.PdfFileReader(pdfFileObj) 

    numPages = pdfReader.numPages

    for p in range(pdfReader.numPages): 

        # creating page object 
        pageObj = pdfReader.getPage(p)
        #extract txt from pageObj into unicode string object
        pages = list()
        for x in (pageObj.extractText()).split('\n'): pages.append(x)

        print(pages)

结果很长,但示例如下所示:

['DESCRIPTIONSULTLetter Type: PLFile Set: SHPPL20190827']
["Dear A**** P***** ,This letter is to let you know that SING DY UY will no longer provide STAR MRSA services for *******HealthPlan effective . This means that SING DY UY cannot be your provider any more through Superior. You can pick a new provider from the ******* HealthPlan network to get services.Superior will work with you to make sure you get the care you need. There is a provider in your areawho can provide services to you. That provider is JOSE BENIGNO JR. You can call them at1-***-362-2685."]
['Estimado(a) ****** *****,Le enviamos esta carta para informarle que SING DY UY dejar de ofrecer servicios de STAR MRSApara ******* HealthPlan a partir del . Esto significa que SING DY UY ya no podr ser su proveedor atravs de Superior. Para obtener servicios, puede escoger un nuevo proveedor de la red de S****** HealthPlan.Superior trabajar con usted para garantizar que reciba la atencin que necesita. Hay un proveedor ensu rea que puede ofrecerle servicios. Ese proveedor es **** BENIGNO JR. Puede comunicarse al1-432-362-2685.]

Tags: toyou列表objectde页面pagesprovider
2条回答

您必须将pages附加到主列表中。将for循环更改为以下内容,它应该可以工作。你知道吗

master_lst = list()
for p in range(pdfReader.numPages):
    pageObj = pdfReader.getPage(p)
    pages = list()
    for x in pageObj.extractText().split('\n'):
        pages.append(x)
    master_lst.append(pages)

但是,这个代码不是Pythonic。内部(嵌套的)for循环是多余的,因为pageObj.extractText().split('\n')返回一个字符串列表,所以不需要遍历它。你知道吗

master_lst = list()
for p in range(pdfReader.numPages):
    pages = pdfReader.getPage(p).extractText().split('\n')
    master_lst.append(pages)

实际上,这个块可以用一行代码来代替。使用列表理解。你知道吗

master_lst = [pdfReader.getPage(p).extractText().split('\n')
              for p in range(pdfReader.numPages)]

完整的代码如下。你知道吗

import PyPDF2

pdfFileObj = open(origFileName, 'rb')
pdfReader = PyPDF2.PdfFileReader(pdfFileObj)
numPages = pdfReader.numPages

master_lst = [pdfReader.getPage(p).extractText().split('\n')
              for p in range(pdfReader.numPages)]

如果您不熟悉列表理解,我建议您在StackOverflow上阅读。你知道吗

你的问题不是很清楚,但是我做了一个名为pages的列表,对于我们遍历的每个页面,我们将行列表(现在称为page)添加到页面列表中。你知道吗

pdfFileObj = open(origFileName, 'rb')  
pdfReader = PyPDF2.PdfFileReader(pdfFileObj) 
numPages = pdfReader.numPages
pages = []

for p in range(pdfReader.numPages): 

    pageObj = pdfReader.getPage(p)
    page = list()
    for x in pageObj.extractText().split('\n'): 
            page.append(x)
    pages.append(page)

相关问题 更多 >

    热门问题