Получение данных из файла с файловыми строками, сгруппированными в пары - PullRequest
0 голосов
/ 26 мая 2018

Таким образом, я должен прочитать файл, и каждый раз, когда я читаю файл, я должен взять строки в парах и сохранить входные данные в переменных и делать разные вещи с входными данными.

Мой вопрос заключается в том, как мне «сгруппировать» строки в пары, чтобы, например, если я возьму три любимых числа людей в первой строке, а их имя и фамилию во второй строке,и произошло ли это для всего файла?Я настроил его так, чтобы просто распечатать содержимое того, что я пытаюсь сохранить для простоты.

array = []
userInput = sys.stdin
array.append(userInput.readline().strip())
firstName,lastName = map(str,userInput.readline().split(" "))

print(firstName)
print(lastName)
print(array)

Пример ввода будет:

1 2 3
John Doe
4 5 6
Queen Mary 

Пример выводав текстовом файле будет:

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

Ответы [ 3 ]

0 голосов
/ 26 мая 2018

Решение с эффективным использованием памяти

Используйте флаг переключения, при котором вы переключаете каждую вторую строку и печатаете содержимое в выходной файл (таким образом, ваша память должна содержать только содержимое максимум 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
0 голосов
/ 26 мая 2018
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)
0 голосов
/ 26 мая 2018

Вы можете 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 так, как вам нравится.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...