- android - 多次调用 OnPrimaryClipChangedListener
- android - 无法更新 RecyclerView 中的 TextView 字段
- android.database.CursorIndexOutOfBoundsException : Index 0 requested, 光标大小为 0
- android - 使用 AppCompat 时,我们是否需要明确指定其 UI 组件(Spinner、EditText)颜色
我有这个 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])
最佳答案
您提供的代码是对您问题的误解。你有一个 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
,它会跳过 amount参数指示的索引数:
[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 .
关于python - 循环遍历文本,一次 3 个字符,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53975082/
我是一名优秀的程序员,十分优秀!