在python中格式化文件输入

时间:2015-10-09 17:21:53

标签: python list dictionary tuples

对于以下类型的文件

Hannover Magdeburg 148
Bremen Dortmund 23
Hannover Kassel 165
Magdeburg Berlin 166

如何存储

等值
my_dictionary= 
{"from":Hannover,
"to":Magdeburg,
"distance":148
}

所有在同一个词典/列表/元组

<pre>with open('input1.txt') as my_file:
    lines=my_file.read().splitlines()

for i in range(len(lines)):
    print lines[i]

my_file.close()
my_tuple={}
for i in range(len(lines)):
    j=0
    my_list = lines[i].split(' ',1)
    my_tuple["from"]=my_list[j]
    my_tuple["to"][i]=my_list[j+1]
    my_tuple["distance"][i]=my_list[j+2]

for i in range(len(lines)):
    print my_list['from'][i]</pre>

2 个答案:

答案 0 :(得分:1)

data = '''Hannover Magdeburg 148
Bremen Dortmund 23
Hannover Kassel 165
Magdeburg Berlin 166'''
data = data.split()
data = [data[i:i + 3] for i in xrange(0, len(data), 3)]
# [['Hannover', 'Magdeburg', '148'], ['Bremen', 'Dortmund', '23'], ['Hannover', 'Kassel', '165'], ['Magdeburg', 'Berlin', '166']]
data = [{k: v for (k, v) in zip(('from', 'to', 'distance'), el)}
        for el in data]
print data

[{'distance': '148', 'from': 'Hannover', 'to': 'Magdeburg'},
 {'distance': '23', 'from': 'Bremen', 'to': 'Dortmund'},
 {'distance': '165', 'from': 'Hannover', 'to': 'Kassel'},
 {'distance': '166', 'from': 'Magdeburg', 'to': 'Berlin'}]

答案 1 :(得分:0)

csv.DictReader可以为您完成工作:

import csv
import pprint

with open('data.txt') as f:
    reader = csv.DictReader(f,fieldnames='from to distance'.split(),delimiter=' ')
    L = list(reader)

pprint.pprint(L)

输出:

[{'distance': '148', 'from': 'Hannover', 'to': 'Magdeburg'},
 {'distance': '23', 'from': 'Bremen', 'to': 'Dortmund'},
 {'distance': '165', 'from': 'Hannover', 'to': 'Kassel'},
 {'distance': '166', 'from': 'Magdeburg', 'to': 'Berlin'}]