Разбор текстового файла построчно и кортежи каждого n разделителя в Python - PullRequest
0 голосов
/ 09 сентября 2018

У меня есть текстовый файл. Я хочу прочитать файл построчно, разделить с разделителем и сделать кортежи каждый n разделитель. Пример:

"A-B-C-D 

E-F-G

Thank You!

For Helping

Stranger-seeker "

Вывод вышеуказанных строк будет выглядеть так:

(A,B,C,D)

(E,F,G\n\nThank You!\n\nFor Helping\n\nStranger,seeker)

Буду очень признателен, если вы поможете мне с решением на Python.

Ответы [ 3 ]

0 голосов
/ 09 сентября 2018

Вы можете разбить входную строку и затем использовать понимание списка на скользящем фрагменте списка:

s = '''A-B-C-D

E-F-G

Thank You!

For Helping

Stranger-seeker'''
l = s.split('-')
print([l[i:i+3] for i in range(0, len(l), 3)])

Это выводит:

[['A', 'B', 'C'], ['D\n\nE', 'F', 'G\n\nThank You!\n\nFor Helping\n\nStranger'], ['seeker']]
0 голосов
/ 09 сентября 2018

Мое решение читать весь файл сразу. Пожалуйста, помогите мне улучшить его.

с открытым (имя файла) как fp:

 data = fp.read()
 my_values = data.split('-')
 my_data = []
 count = 0
 rem_values = []
 delimiter_count =  len(my_values) - 1
 for x in range(len(my_values)):
     count += 1
     if count == 4:
         split_val = my_values[x].split("\n")
         if len(split_val) == 2:
             count = 1
             my_data.append(split_val[0] )
             rem_values.append(my_data ) 
             my_data = [ split_val[1] ]
        else:
             count = 1
             my_data.append(split_val[0] )
             rem_values.append(my_data ) 
    else:
        my_data.append( my_values[x] )

печать (rem_values)

0 голосов
/ 09 сентября 2018

В itertools есть рецепт для grouper. Вы можете использовать его для группировки списка в фрагменты фиксированной длины

>>> from itertools import zip_longest
>>> def grouper(iterable, n, fillvalue=None):
...     "Collect data into fixed-length chunks or blocks"
...     # grouper('ABCDEFG', 3, 'x') --> ABC DEF Gxx"
...     args = [iter(iterable)] * n
...     return zip_longest(*args, fillvalue=fillvalue)
... 
>>> data = open('tmp.txt').read().split('-')
>>> list(grouper(data, 4))
[('A', 'B', 'C', 'D\nE'), ('F', 'G\nThank You!\nFor Helping\nStranger', 'seeker\n', None)]
...