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

在Python中创建一组独立列表的主列表,python,list,pypdf2,Python,List,Pypdf2,我从PDF中提取了文本数据,并使用split将其划分为单独的页面,并将其附加到名为pages的空列表中。但是,这会导致页面成为一个对象,每个页面只包含一大堆单独的列表对象 我想要的是一个包含所有这些单独列表对象的主列表,这样当我检查打印(键入(页面))时,我会得到一个列表,而不是单个列表的长打印输出 # creating a pdf File object of original pdf pdfFileObj = open(origFileName, 'rb')

我从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.]

你的问题不是很清楚,但是我做了一个名为
页面
的列表,对于我们迭代的每个页面,我们将行列表(现在称为
页面
)添加到页面列表中

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)

您必须将
页面
附加到主列表中。将
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。
循环的内部(嵌套的)
是多余的,因为
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上阅读相关内容。

谢谢!这正是我所需要的。我现在很难把每一页分成不同的单词。我要么得到了我最初的问题,每页都被撕开,但现在失去了在主列表中的结构<代码>对于页面中的页面:对于页面中的行:words=line.split(“”)打印(words)
或者我使用列表理解,它做同样的事情,只是在每个单独的列表周围放置一个额外的括号
,对于页面中的页面:words=[line.split(“”)对于页面中的行]
@BenSmith查找列表理解。这将真正帮助你更清楚地了解你能做什么。