循环浏览文字,一次3个字符

时间:2018-12-30 03:33:02

标签: python python-3.x

我在PDF中有以下文本: “约翰是一个喜欢煎饼的法国人,他也喜欢踢足球”

我想一次遍历PDF文本中的三个字符。我尝试了以下操作,但是出现了只能将str(而不是“ int”)连接到str的错误。我了解此错误的含义,但不确定如何在代码中解决此问题。

pdf_text = pdf_file.getPage(1).extractText()

for c in pdf_text:
    print(pdf_text[c:c+3])

我期望得到一个结果,例如:

Joh
ohn
hn 
etc...

任何带有解释的建议将不胜感激。如果您需要更多信息,请告诉我。谢谢。

编辑:我能够使用@slider的评论解决此问题。

出于教育目的:

for c in range(len(text) - 3):
    print(text[c:c+3])

1 个答案:

答案 0 :(得分:2)

您提供的代码误解了您的问题。您有一个text,即str"John is a french person...",然后您说(换句话说):

for char in text: print(text[char:char+3])

在这里您可以清楚地知道出了什么问题-char不是有效的索引,因为它本身就是str(在第一次迭代中为"J")。相反,您希望从文本中获取索引,并且由于文本中的字符与索引的数量完全相同,因此range(len(text))可以解决问题。

您说要跳过每3个字符。好吧,range()接受一个step参数(请参阅docs),因此,如果您提供任何step,它将跳过该参数指示的索引数量:

[i for i in range(0, 10, 3)]
>>> [0, 3, 6, 9]

现在,您只需要考虑在将数字添加到具有固定元素集的列表的索引时所假定的错误,如text[i:i+3] ...

steps = [i for i in range(0, len(text)-3, 3)]
for step in steps:
    print(text[step:step+3])

(请注意,明确说出range(0, n)与说出range(n)相同)

编辑:

您说您需要文本重叠,因此,无需跳过字符,您只需要遍历文本的每个索引,再次说明不存在的最后一个索引:

steps = [i for i in range(len(text)-3)]
for step in steps:
     print(text[step:step+3])

相同
for char_index in range(len(text)-3):
    print(text[char_index:char_index+3])

relevant