Reading data from specially formatted text file

廉价感情. 提交于 2019-12-01 10:35:49

Something like this:

import re
with open('abc') as f:
    for line in f:
        if line.startswith('Key'):
            keys = re.search(r'Key\s+(.*)',line).group(1).split("\t")
        elif line.startswith(('Word','Letter')):
            vals = re.search(r'(Word|Letter)\s+(.*)',line).group(2).split("\t")

    print dict(zip(keys,vals))

abc:

LineHere  w    x    y    z
Key       a 1  b 2  c 3  d 4
OrHere    00   01   10   11
Word      as   box  cow  dig

output is :

{'d 4': 'dig', 'b 2': 'box', 'a 1': 'as', 'c 3': 'cow'}

abc:

LineHere  w    x    y    z
Key       a 1  b 2  c 3  d 4
OrHere    00   01   10   11
Letter    A    B    C    D

output is :

{'d 4': 'D', 'b 2': 'B', 'a 1': 'A', 'c 3': 'C'}
ss = '''LineHere  w    x    y    z
Key       a 1  b 2  c 3  d 4
OrHere    00   01   10   11
Word      as   box  cow  dig
'''
import re

rgx = re.compile('Key +(.*)\r?\n'
                 '(?:.*\r?\n)?'
                 '(?:Word|Letter) +(.*)\r?\n')

mat = rgx.search(ss)
keys = mat.group(1).split(' ')
words = mat.group(2).split('\t')

You'll obtain ss by reading your file:

with open (filename) as f:
    ss = f.read()

Edit

Well, if all the lines have data separated with tabs, you can do:

ss = '''LineHere  w\tx\ty\tz
Key       a 1\tb 2\tc 3\td 4
OrHere    00\t01\t10\t11
Word      as\tbox\tcow\tdig
'''
import re

rgx = re.compile('Key +(.*)\r?\n'
                 '(?:.*\r?\n)?'
                 '(?:Word|Letter) +(.*)\r?\n')

print  dict(zip(*map(lambda x: x.split('\t'),
                     rgx.search(ss).groups())))
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!