我想知道是否有人对这个问题有一种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
不像你要求的那么优雅,但这很有效
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)
| 归档时间: |
|
| 查看次数: |
422 次 |
| 最近记录: |