【问题标题】:Chunking a text into 5-line chunks then working over each将文本分块成 5 行块,然后处理每个块
【发布时间】:2012-05-07 17:35:42
【问题描述】:

我正在尝试编写一个程序,它将一个文本文件组织成 5 个行块,并将整个文本分割成这些块以分别处理。

目前我正在尝试使用:

text = open(filename).readlines()
chunk5 = zip(*(iter(text),) * 5)

for lines in chunk5:
    line = re.split('\n', text) # split a chunk into lines by line break
    # ...more statements

请原谅,因为我是一个完整的初学者,但这是正确的方法吗?我觉得chunk5 中的行中的chunk5 中缺少某些内容,这些行将指定我正在使用的块。

我如何让程序遍历每个块,直到它也完成文本中的所有块?

【问题讨论】:

  • 为什么要先分块再分行?
  • 啊,它再次被拆分成谎言的原因是因为最终在每 5 行的块中,我创建了一个列表,列出了第 1 行和第 2 行,其中这些行中的每个单词都相互对应。之后,我将它们压缩到匹配键和值的字典中,以添加到整个文本的更大字典中。
  • @user:在这种情况下,您不想拆分text。也许您想拆分lines[0]lines[1] 之类的。

标签: python loops chunking


【解决方案1】:

我总是喜欢用生成器来解决这样的问题:

def chunkN(lines, N):
    acc = []
    for line in lines:
        acc.append(line)
        if len(acc) == N:
             yield acc
             acc = []
    if len(acc): # remainder
        yield acc

# Now you can do this...
for chunk in chunkN(open('myfile', 'r'), 5):
    print '-' * 80
    print ''.join(chunk)

我将保留块大小的参数化并访问其余部分

【讨论】:

  • 同时检查来自heregrouper 函数。它更短且不使用临时列表。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2010-11-26
  • 1970-01-01
  • 2020-02-05
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多