正在解析结构文件 Python
Parsing srtructure file Python
我想了解在 Python 中使用构造 Case When 的特殊性。
我有以下类型的文本文件:
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
是否可以使用这种方法将数据分解为所需的格式?
谢谢
您可以使用 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
假设您的文件名为 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
我想了解在 Python 中使用构造 Case When 的特殊性。 我有以下类型的文本文件:
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
是否可以使用这种方法将数据分解为所需的格式? 谢谢
您可以使用 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
假设您的文件名为 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