Python迭代列表并将没有特殊字符的行连接到前一项

Syn*_*ose 9 python python-2.7

我想知道是否有人对这个问题有一种hacky/cool解决方案.我有一个像这样的文本文件:

NAME:name
ID:id
PERSON:person
LOCATION:location

NAME:name
morenamestuff
ID:id
PERSON:person
LOCATION:location

JUNK
Run Code Online (Sandbox Code Playgroud)

所以我有一些块都包含可以分成dict的行,有些则不能.如何在没有:角色的情况下使用线条并将它们连接到上一行?这就是我目前正在做的事情

# loop through chunk
    # the first element of dat is a Title, so skip that
    key_map = dict(x.split(':') for x in dat[1:])
Run Code Online (Sandbox Code Playgroud)

但我当然得到一个错误,因为第二个块有一行没有:字符.所以我希望我的dict在正确分割之后看起来像这样:

# there will be a key_map for each chunk of data
key_map['NAME'] == 'name morenamestuff' # 3rd line appended to previous
key_map['ID'] == 'id'
key_map['PERSON'] = 'person'
key_map['LOCATION'] = 'location
Run Code Online (Sandbox Code Playgroud)

编辑:这是我在github上的最终解决方案,以及完整代码:

parseScript.py

import re
import string

bad_chars = '(){}"<>[] '     # characers we want to strip from the string
key_map = []

# parse file
with open("dat.txt") as f:
    data = f.read()
    data = data.strip('\n')
    data = re.split('}|\[{', data)

# format file
with open("format.dat") as f:
    formatData = [x.strip('\n') for x in f.readlines()]

data = filter(len, data)

# strip and split each station
for dat in data[1:-1]:
    # perform black magic, don't even try to understand this
    dat = dat.translate(string.maketrans("", "", ), bad_chars).split(',')
    key_map.append(dict(x.split(':') for x in dat if ':' in x ))
    if ':' not in dat[1]:key_map['NAME']+=dat[k][2]


for station in range(0, len(key_map)):
    for opt in formatData:
        print opt,":",key_map[station][opt]
    print ""
Run Code Online (Sandbox Code Playgroud)

dat.txt

在这里查看原始

的format.dat

NAME
STID
LONGITUDE
LATITUDE
ELEVATION
STATE
ID
Run Code Online (Sandbox Code Playgroud)

out.dat

在这里查看原始

csa*_*nes 0

不像你要求的那么优雅,但这很有效

dat=[['NAME:name',
      'ID:id',
      'PERSON:person',
      'LOCATION:location'],
      ['NAME:name',
      'morenamestuff',
      'ID:id',
      'PERSON:person',
      'LOCATION:location']]
k=1
key_map = dict(x.split(':') for x in dat[k] if ':' in x )
if ':' not in dat[k][1]:key_map['NAME']+=dat[k][1]

key_map>>
{'ID': 'id',
'LOCATION': 'location',
'NAME': 'namemorenamestuff',
'PERSON': 'person'}
Run Code Online (Sandbox Code Playgroud)