可能重复:
如何提取文本文件转换成字典
我有一个文本文件,我想将它变成一个Python字典。 该文本文件如下。 当我想有键为“太阳”和“地球”和“月亮”,然后这些值的轨道半径,周期和这样的,这样我可以实现动画太阳能系统进入快挂。
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
到目前为止我的代码是
def file():
file = open('smallsolar.txt', 'r')
answer = {}
text = file.readlines()
print(text)
text = file()
print (text)
我不知道现在是什么做的。 有任何想法吗?
answer = {} # initialize an empty dict
with open('path/to/file') as infile: # open the file for reading. Opening returns a "file" object, which we will call "infile"
# iterate over the lines of the file ("for each line in the file")
for line in infile:
# "line" is a python string. Look up the documentation for str.strip().
# It trims away the leading and trailing whitespaces
line = line.strip()
# if the line starts with "Object"
if line.startswith('Object'):
# we want the thing after the ":"
# so that we can use it as a key in "answer" later on
obj = line.partition(":")[-1].strip()
# if the line does not start with "Object"
# but the line starts with "Orbital Radius"
elif line.startswith('Orbital Radius'):
# get the thing after the ":".
# This is the orbital radius of the planetary body.
# We want to store that as an integer. So let's call int() on it
rad = int(line.partition(":")[-1].strip())
# now, add the orbital radius as the value of the planetary body in "answer"
answer[obj] = rad
希望这可以帮助
有时候,如果你有十进制数字(“浮点数”在python-说吧)在您的文件( 3.14
等),调用int
上会失败。 在这种情况下,使用float()
代替int()
读取文件中的一个字符串,而不是readlines方法(),然后分裂的“\ n \ n”,这样一来,你将有一个项目列表,每个描述你的对象。
这时,你可能想创建一个类确实是这样的:
class SpaceObject:
def __init__(self,string):
#code here to parse the string
self.name = name
self.radius = radius
#and so on...
然后您可以创建这些对象的列表
#items is the list containing the list of strings describing the various items
l = map(lambda x: SpaceObject(x),items).
再简单地做以下
d= {}
for i in l:
d[i.name] = i