在Python中,逐行解析文本文件并使元组每隔n个分隔符
我有一个文本文件。我想逐行读取文件,用分隔符拆分,并每隔在Python中,逐行解析文本文件并使元组每隔n个分隔符,python,string,python-3.x,python-2.7,file-processing,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解决方案,我将不胜感激。在itertools中有一个grouper的配方。您可以使用它将列表分组为固定长
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解决方案,我将不胜感激。在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']]
我的解决方案是一次读取整个文件。请帮我改进一下 以fp形式打开(文件名):
打印(rem_值)不应该是单个元素吗?对不起!在这种情况下,n应该是3。到目前为止,您尝试了什么?我通过一次读取整个文件成功地获得了它。我想一行一行地读。谢谢你的努力。在元组中的4个字段之后,新行表示另一条记录。我还试图一次读取每一行的文件。”“D\nE”是第二条记录的一部分。
list(grouper(data,3))
会将元素分为几块或三块。因此,您将得到[('A','B','C'),('D\nE','F','G\n谢谢你!\n帮助管理员',('seeker\n',无,无)]
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] )