关于python:将文本转换为具有特定键和值的字典

Convert text into a dictionary with certain keys and values

本问题已经有最佳答案,请猛点这里访问。

Possible Duplicate:
how to extract a text file into a dictionary

我有一个文本文件,我想把它改成Python中的字典。文本文件如下。在这里我想有"太阳"和"地球"以及"月球"等关键点,然后对于轨道半径、周期等值,我可以在QuickDraw中实现一个动画太阳系。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
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

到目前为止我的代码是

1
2
3
4
5
6
7
8
9
10
def file():
    file = open('smallsolar.txt', 'r')
    answer = {}
    text = file.readlines()
    print(text)



text = file()
print (text)

我不知道现在该怎么办。有什么想法吗?


1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
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

希望这有帮助

有时,如果文件(3.14等)中有一个十进制数字("python speak"中的浮点数),则对其调用int将失败。在这种情况下,使用float()而不是int()


用一个字符串而不是readlines()读取文件,然后拆分为"",这样您将拥有一个项目列表,每个项目都描述您的对象。

然后您可能想要创建一个这样的类:

1
2
3
4
5
6
7
class SpaceObject:
  def __init__(self,string):
    #code here to parse the string

    self.name = name
    self.radius = radius
    #and so on...

然后,您可以使用

1
2
#items is the list containing the list of strings describing the various items
l = map(lambda x: SpaceObject(x),items).

然后简单地做以下操作

1
2
3
d= {}
for i in l:
  d[i.name] = i