逐行解析文本文件,并在Python中每隔n个分隔符创建元组

时间:2018-09-09 03:46:43

标签: python string python-3.x python-2.7 file-processing

我有一个文本文件。我想逐行读取文件,使用分隔符分割,并在每个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 :(得分:0)

在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)]

答案 1 :(得分:0)

您可以拆分输入字符串,然后在列表的滚动切片上使用列表理解:

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']]

答案 2 :(得分:0)

我的解决方案是一次读取整个文件。请帮我改进它。

以open(filename)作为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)