【问题标题】:Cells in Jupyter notebooksJupyter 笔记本中的单元格
【发布时间】:2021-02-16 17:21:24
【问题描述】:

我正在尝试在 Jupyter 笔记本中使用 PyPDF2 解析 pdf。下面是我想如何编写代码的不同部分,即一个单元格中的提取文本语句和一个新单元格中的 RegEx。但是,如果我将两段代码分开如下,RegEx 只运行文件的最后一页,而不是整个文件(12 页)。为什么会这样?我真的很想使用不同的单元格。

import PyPDF2
import re

file = open(r'file.pdf', 'rb')
doc = PyPDF2.PdfFileReader(file)
#print(doc.getNumPages()) 

#新单元格

for i in range(0, 12):
page = doc.getPage(i)
text = page.extractText()
   #print(text)

#新单元格

doc_re = re.compile(r'S\d+_\d+', re.IGNORECASE)
result = doc_re.findall(text)
print(result)

【问题讨论】:

    标签: jupyter-notebook


    【解决方案1】:

    每次运行 for 循环时,都会使用 text = page.extractText() 重置文本的值

    RegEx 运行在您提供的内容上,即text。即使您的循环运行超过 12 页,第二个代码单元格也会收到 text 的最终值(这是您在循环的最后一次迭代中指定的值)。

    您可以将代码从 for 循环内的第二个单元格中移出,或者更好的选择是将每个页面的文本添加到文本中。

    所以,将text = 转换为text += 应该可以解决您的问题。

    【讨论】:

    • 谢谢,PntButterWolf。我现在坚持的一件事(我是初学者)是,如果我使用 'text +=' ,每次运行 for 循环时都会附加输出,即第一次运行单元格 'text' = 12 页长,第二次 'text' = 24 页等等......我怎样才能阻止它附加输出?无论我重新运行单元格多少次,“文本”都应始终为 12 页。
    • @SR-77 关于 Jupyter 的恼人之处在于它不会在您完成执行单元后重置您的变量(这样您就可以在笔记本的后续单元中使用该计算变量)。在同一个单元格中,使用print 获得输出后,删除/重置您的text 变量。这将为您的单元的下一次运行扫清障碍
    • 感谢您的建议。我非常接近完成我的第一个 Python 项目!耶!
    猜你喜欢
    • 2016-01-14
    • 2020-05-05
    • 2016-02-04
    • 2017-02-27
    • 2017-08-04
    • 1970-01-01
    • 2020-04-02
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多