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

2024-05-29 10:22:25 发布

您现在位置:Python中文网/ 问答频道 /正文

我有一个文本文件。我想逐行读取文件,用分隔符拆分,并每隔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解决问题,我将非常感激。你知道吗


Tags: 文件youforhelping解决问题thank文本文件分隔符
3条回答

我的解决办法是一次读取整个文件。请帮我改进一下。你知道吗

打开(文件名)为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\ U值)

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

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

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

相关问题 更多 >

    热门问题