我想了解在Python中使用构造Case的特性。我有一个以下类型的文本文件:
Head 1
a 10
a 14
a 15
Head 4
a 32
a 55
a 79
Head 53
a 22
a 33
Head 33
a 11
a 66
Head 32
a 88
a 89
a 88
End
我想解析并将此文件结构化到下一个平面:
Head 1, a 10
Head 1, a 14
Head 1, a 15
Head 4, a 32
Head 4, a 55
Head 4, a 79
Head 53, a 22
Head 53, a 33
Head 33, a 11
Head 33, a 66
Head 32, a 88
Head 32, a 89
Head 32, a 88
当我开始学习Python时,我学到的第一件事就是缺少这种情况。
我尝试的方式:
array = []
with open('C:/file/1.txt') as f:
for line in f:
if line[0:4] == 'Head':
Header = line
print(Header)
elif line[0:1] == 'a':
Subheader = line
print(Subheader)
else:
continue
是否可以使用此方法以所需格式分解数据?谢谢
假设您的文件名为filename.txt
:
>>> with open('filename.txt', 'r') as f:
... current_head = None
... result = []
... for line in f:
... if line.startswith('End'):
... break
... elif line.startswith('Head'):
... current_head = line.rstrip()
... else:
... result.append('{}, {}'.format(current_head, line.rstrip()))
...
>>> for line in result:
... print(line)
...
Head 1, a 10
Head 1, a 14
Head 1, a 15
Head 4, a 32
Head 4, a 55
Head 4, a 79
Head 53, a 22
Head 53, a 33
Head 33, a 11
Head 33, a 66
Head 32, a 88
Head 32, a 89
Head 32, a 88
你可以使用itertools.groupby
:
import itertools
data = [i.strip('\n').split() for i in open('filename.txt')][:-1]
s = [list(b) for _, b in itertools.groupby(data, key=lambda x:x[0] == 'Head')]
new_s = [s[i]+s[i+1] for i in range(0, len(s), 2)]
final_s = [[i[0]+b for b in i[1:]] for i in new_s]
with open('filename1.txt', 'a') as f:
for row in final_s:
for i in row:
f.write('{} {}, {} {}\n'.format(*i))
输出:
Head 1, a 10
Head 1, a 14
Head 1, a 15
Head 4, a 32
Head 4, a 55
Head 4, a 79
Head 53, a 22
Head 53, a 33
Head 33, a 11
Head 33, a 66
Head 32, a 88
Head 32, a 89
Head 32, a 88