从段中读取文件

Nau*_*hid 2 python

我编写了一个脚本,从两个不同的文件中读取数据并相应地继续.但是,当我编写脚本时,我的印象是我正在阅读的第一个文件只有两行,遗憾的是后来这已经改变了.

我的代码提取前两行并将数据传递给另一个函数,然后通过多个其他函数继续进行计算.

现在我正在做这样的事情:

try:
    file = open(myfile, 'r')
    for line in file:
        if line[0] != '|':
            name = line.strip('\n')
        else:
            data = line.strip('|\n')
Run Code Online (Sandbox Code Playgroud)

通常,该文件如下所示:

Samantha
|j&8ju820kahu9|
Run Code Online (Sandbox Code Playgroud)

现在,遗憾的是,我可以拥有一个可以有多行的文件,如下所示:

Andy
|o81kujd0-la88js|
Mathew
|a992kma82nf-x01j4|
Andrew
|01ks83nnz;a82jlad|
Run Code Online (Sandbox Code Playgroud)

有没有办法可以从文件中一次提取两行?处理它们然后继续提取两个?所以抓住前两行,给它们命名+数据,将它传递给我的函数,最后打印所需的内容,然后得到新的两行,依此类推.

请指教.

One*_*Day 6

是的,因为文件上下文也是一个迭代器:

with open(filename, 'r') as f:
    for l1, l2 in zip(f, f):
        # ... do something with l1 and l2
Run Code Online (Sandbox Code Playgroud)

这是最短和最pythonic方式afaik.

  • 这也是基于副作用和"zip"的迭代器评估顺序.这将是一个很好的谜题,问为什么它不会返回相同的线对. (2认同)
  • 请注意,这是一个很好的文档和保证.来自[文档](https://docs.python.org/2/library/functions.html#zip):保证了迭代的从左到右的评估顺序.这使得使用zip(*[iter(s)]*n)将数据序列聚类成n长度组的习惯成为可能. (2认同)