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 |
希望这有帮助
有时,如果文件(
用一个字符串而不是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 |