从文件行中获取输入,文件行分组成对

时间:2018-05-26 01:11:26

标签: python file-io

所以我必须读取一个文件,每次我读取文件时,我必须成对地获取行并将输入存储在变量中并使用输入数据执行各种操作。

我的问题是我如何成对地“分组”这些行,以便例如,如果我在第一行上取三个人最喜欢的数字,并在第二行上取他们的名字和姓,并且有这个发生整个文件?为了简单起见,我将其设置为打印出我想要存储的内容。

John
Doe
['1 2 3']
Queen
Mary
['4 5 6']

输入的一个例子是:

List<Control> _itemsToDelete = new List<Control>();

文本文件中的输出示例如下:

bool _garbageMode = false;

3 个答案:

答案 0 :(得分:1)

你可以在一个循环中readline两次并将它们附加到数据结构等......:

伪代码

dataread = []

with open('file', 'r') as f:
    while f still has lines:
        twolines = [f.readline()]   # add strip/split as needed
        twolines.append(f.readline()) 
        dataread.append(twolines)

您可能需要处理异常。

阅读完毕后,您可以按照自己喜欢的方式dataread处理每组两行。

答案 1 :(得分:0)

内存有效解决方案

使用切换标记,您可以每隔一行切换一次并将内容打印到输出文件(因此,您的记忆必须一次只保留最多2行的内容):

with open('infile.txt') as in_file, 
    open('outfile.txt', 'w') as out_file:
        flag = 0
        for line in in_file:
            if not flag:
                s3 = [line]
                flag = 1
            else:
                s1, s2 = line.split()
                print(s1, end = "\n", file = out_file)
                print(s2, end = "\n", file = out_file)
                print(repr(s3), end = "\n", file = out_file)
                flag = 0

答案 2 :(得分:0)

from itertools import zip_longest

def read_lines_in_batches(file_path, n = 1):
    with open(file_path) as fh:
        fhs = [fh] * n
        for batch in zip_longest(*fhs):
            yield [line for line in batch if line]

for lines in read_lines_in_batches('foo/bar.txt', 3):
    print(lines)