Python 如何将文本文件提取到词典中
我想知道如何用python将文本提取到字典中。文本文件的格式是这样的(见下文)并以这样的方式提取,例如,对象earth是关键点,其半径、周期和所有都在关键点内Python 如何将文本文件提取到词典中,python,dictionary,Python,Dictionary,我想知道如何用python将文本提取到字典中。文本文件的格式是这样的(见下文)并以这样的方式提取,例如,对象earth是关键点,其半径、周期和所有都在关键点内 RootObject: Sun Object: Sun Satellites: Mercury,Venus,Earth,Mars,Jupiter,Saturn,Uranus,Neptune,Ceres,Pluto,Haumea,Makemake,Eris Radius: 20890260 Orbital Radius: 0 Ob
RootObject: Sun
Object: Sun
Satellites: Mercury,Venus,Earth,Mars,Jupiter,Saturn,Uranus,Neptune,Ceres,Pluto,Haumea,Makemake,Eris
Radius: 20890260
Orbital Radius: 0
Object: Earth
Orbital Radius: 77098290
Period: 365.256363004
Radius: 6371000.0
Satellites: Moon
Object: Moon
Orbital Radius: 18128500
Radius: 1737000.10
Period: 27.321582
假设要将具有逗号分隔值的元素作为列表,请尝试:
mydict={}
with open(my_file,'r') as the_file:
for line in the_file:
if not line.strip(): continue # skip blank lines
key,val=line.split(": ")
val = val.split(",")
mydict[key] = val if len(val) > 1 else val[0]
使用上述其中一项的修改,您将得到如下结果:
def read_next_object(file):
obj = {}
for line in file:
if not line.strip(): continue
line = line.strip()
key, val = line.split(": ")
if key in obj and key == "Object":
yield obj
obj = {}
obj[key] = val
yield obj
planets = {}
with open( "test.txt", 'r') as f:
for obj in read_next_object(f):
planets[obj["Object"]] = obj
print planets
{ 'Earth': { 'Object': 'Earth',
'Orbital Radius': '77098290',
'Period': '365.256363004',
'Radius': '6371000.0',
'Satellites': 'Moon'},
'Moon': { 'Object': 'Moon',
'Orbital Radius': '18128500',
'Period': '27.321582',
'Radius': '1737000.10'},
'Sun': { 'Object': 'Sun',
'Orbital Radius': '0',
'Radius': '20890260',
'RootObject': 'Sun',
'Satellites': 'Mercury,Venus,Earth,Mars,Jupiter,Saturn,Uranus,Neptune,Ceres,Pluto,Haumea,Makemake,Eris'}}
修复RootObject
的情况,我相信这是您从发布的示例数据中查找的最后一个字典。这是一本行星词典,每一颗行星都是它的信息词典
print planets["Sun"]["Radius"]
应打印值20890260
上面的输出如下所示:
def read_next_object(file):
obj = {}
for line in file:
if not line.strip(): continue
line = line.strip()
key, val = line.split(": ")
if key in obj and key == "Object":
yield obj
obj = {}
obj[key] = val
yield obj
planets = {}
with open( "test.txt", 'r') as f:
for obj in read_next_object(f):
planets[obj["Object"]] = obj
print planets
{ 'Earth': { 'Object': 'Earth',
'Orbital Radius': '77098290',
'Period': '365.256363004',
'Radius': '6371000.0',
'Satellites': 'Moon'},
'Moon': { 'Object': 'Moon',
'Orbital Radius': '18128500',
'Period': '27.321582',
'Radius': '1737000.10'},
'Sun': { 'Object': 'Sun',
'Orbital Radius': '0',
'Radius': '20890260',
'RootObject': 'Sun',
'Satellites': 'Mercury,Venus,Earth,Mars,Jupiter,Saturn,Uranus,Neptune,Ceres,Pluto,Haumea,Makemake,Eris'}}
输出:
{
'Sun':
{
'Satellites': 'Mercury,Venus,Earth,Mars,Jupiter,Saturn,Uranus,Neptune,Ceres,Pluto,Haumea,Makemake,Eris',
'Orbital Radius': '0',
'Radius': '20890260'
},
'Moon':
{
'Orbital Radius': '18128500',
'Radius': '1737000.10',
'Period': '27.321582',
'RootObject': 'Earth'
},
'Earth':
{
'Satellites': 'Moon',
'Orbital Radius': '77098290',
'Radius': '6371000.0',
'Period': '365.256363004',
'RootObject': 'Sun'
}
}
实际上,由于冲突,即使是我的编辑也不够。需要OPyes提供更多信息-不幸的是,在做它所说的事情时,这个答案并不能真正回答问题。。而且它在处理过程中也会丢失数据。您希望得到什么样的结果?一本普通的字典不太管用,因为你的一些关键点是重复的。想把一个太阳系变成动画吗quickdraw@tomsmith-你能用你想要的输入示例格式的输出更新问题吗?很难说出你想从这个问题中得到什么。输入中应该有空行吗?看起来会有,但那可能只是一个格式问题…?我一直看到这个作业出现…你的老师怎么办?难道他们不能像rational讲师一样给你JSON吗?为什么他们让学生解析
:
字符的文本文件?你能改进这一点吗,以便将数字解析为python小数,将卫星解析为元组?我想补充一点,但由于OP没有包括他们的意图,或者说他们的原始尝试,他们可以将这些琐碎的添加到代码中。我觉得这个解决方案也应该在很大程度上回答这个问题。回溯(最近一次调用最后一次):文件“a4.py”,第14行,在行星[obj][“Object”]=obj TypeError:unhable type:“dict”谢谢你如何使“Root Object”像“Sun”“Moon”一样成为主键如何将卫星(如10)拆分为一个列表您可以使用python字符串上的split
函数将卫星拆分为一个列表。至于另一个,只需寻找它并像行星一样返回,然后修改第二部分,将行星放入主列表,以便正确添加。OP:一定要告诉你的老师给他们未来的学生JSON,强迫学生做这种枯燥的工作以获得更有趣的主题是疯狂的。