Python 如何从文本文件创建复杂词典?

Python 如何从文本文件创建复杂词典?,python,Python,我有一个文本文件将其称为testText.txt,如下所示: #Rooms room Hall room Kitchen room Storage room Bedroom room Bathroom room Garage #Doors door N open Hall Bedroom door N closed Storage Kitchen door E locked Hall Storage door E open Bedroom Kitchen door N open Bedroom

我有一个文本文件将其称为testText.txt,如下所示:

#Rooms
room Hall
room Kitchen
room Storage
room Bedroom
room Bathroom
room Garage
#Doors
door N open Hall Bedroom
door N closed Storage Kitchen
door E locked Hall Storage
door E open Bedroom Kitchen
door N open Bedroom Bathroom
door S open Bedroom Hall
door S open Bathroom Bedroom
door W locked Hall Garage
door W open Kitchen Bedroom
door S closed Kitchen Storage
door W open Storage Hall
door E locked Garage Hall
#Items
item car Garage STATIONARY
item remote Kitchen MOVE
item key Bedroom USE
item key Hall USE
#Start position
start Hall
tempRooms={1:{"name":"Hall","N":{"dir":2,"status":"open"},"E":{"dir":3,"status":"locked"},"W":{"dir":4,"status":"locked"},"item":{"itemName":"key","movementStatus":"USE"},"start":1},
       2:{"name":"Bedroom","E":{"dir":5,"status":"open"},"N":{"dir":6,"status":"open"},"S":{"dir":1,"status":"open"},"item":{"itemName":"key","movementStatus":"USE"},"start":1},
       3:{"name":"Storage","N":{"dir":5,"status":"closed"},"W":{"dir":1,"status":"open"},"start":1},
       4:{"name":"Garage","E":{"dir":1,"status":"locked"},"item":{"itemName":"car","movementStatus":"STATIONARY"},"start":1},
       5:{"name":"Kitchen","W":{"dir":2,"status":"open"},"S":{"dir":3,"status":"closed"},"item":{"itemName":"remote","movementStatus":"MOVE"},"start":1},
       6:{"name":"Bathroom","S":{"dir":2,"status":"open"},"start":1}}
我想将文本文件转换为字典,如下所示:

#Rooms
room Hall
room Kitchen
room Storage
room Bedroom
room Bathroom
room Garage
#Doors
door N open Hall Bedroom
door N closed Storage Kitchen
door E locked Hall Storage
door E open Bedroom Kitchen
door N open Bedroom Bathroom
door S open Bedroom Hall
door S open Bathroom Bedroom
door W locked Hall Garage
door W open Kitchen Bedroom
door S closed Kitchen Storage
door W open Storage Hall
door E locked Garage Hall
#Items
item car Garage STATIONARY
item remote Kitchen MOVE
item key Bedroom USE
item key Hall USE
#Start position
start Hall
tempRooms={1:{"name":"Hall","N":{"dir":2,"status":"open"},"E":{"dir":3,"status":"locked"},"W":{"dir":4,"status":"locked"},"item":{"itemName":"key","movementStatus":"USE"},"start":1},
       2:{"name":"Bedroom","E":{"dir":5,"status":"open"},"N":{"dir":6,"status":"open"},"S":{"dir":1,"status":"open"},"item":{"itemName":"key","movementStatus":"USE"},"start":1},
       3:{"name":"Storage","N":{"dir":5,"status":"closed"},"W":{"dir":1,"status":"open"},"start":1},
       4:{"name":"Garage","E":{"dir":1,"status":"locked"},"item":{"itemName":"car","movementStatus":"STATIONARY"},"start":1},
       5:{"name":"Kitchen","W":{"dir":2,"status":"open"},"S":{"dir":3,"status":"closed"},"item":{"itemName":"remote","movementStatus":"MOVE"},"start":1},
       6:{"name":"Bathroom","S":{"dir":2,"status":"open"},"start":1}}
我尝试过代码,但这种转换对我来说似乎很复杂。我尝试过的是:《房间词典》

with open(filename,'r') as input_data:
    for line in input_data:
        if line.strip() == '#Rooms':  # Or whatever test is needed
            break
    for line in input_data:  # This keeps reading the file
        if line.strip() == '#Doors':
            break
        lines=line.strip().split()
        a=lines[0]
        b=lines[1]
        rooms[a]=b
        print(rooms['room'])
with open(filename,'r') as input_data:
    for line in input_data:
        if line.strip()=='#Doors':
            break
    for line in input_data:
            if line.strip()=='#Items':
                break
            lines=line.strip().split()
            doors[lines[0]]={'room':lines[3]},{lines[1]:lines[4]},{'status':lines[2]}
            print(doors)
门词典

with open(filename,'r') as input_data:
    for line in input_data:
        if line.strip() == '#Rooms':  # Or whatever test is needed
            break
    for line in input_data:  # This keeps reading the file
        if line.strip() == '#Doors':
            break
        lines=line.strip().split()
        a=lines[0]
        b=lines[1]
        rooms[a]=b
        print(rooms['room'])
with open(filename,'r') as input_data:
    for line in input_data:
        if line.strip()=='#Doors':
            break
    for line in input_data:
            if line.strip()=='#Items':
                break
            lines=line.strip().split()
            doors[lines[0]]={'room':lines[3]},{lines[1]:lines[4]},{'status':lines[2]}
            print(doors)
但是我不能得到想要的输出。我尝试了很多次和不同的类型,但每次都失败了。我必须开发一个交互式小说游戏(基于文本的冒险游戏)。所以,我的文本文件中有数据,我想要字典的精确输出。 如果起始大厅是起始位置,项目表示项目所在的位置,则用户将能够拾取或使用它。 高于1,2,3..等。表示键。
请帮助我获得所需的输出。

您希望避免不必要的处理。每行循环一次。忽略以#开头的行(它们没有任何意义)。把每一行分成几个字。看第一个单词。如果第一个单词是room,请将其添加到词典中。如果是门或物品,请将其添加到字典中相应的房间。

什么是“你每次都失败”的意思?究竟是什么样的尝试,取得的结果,以及与期望的最终结果的差异?示例显示每个房间不超过一个项目(并且输出格式似乎不支持更多)。这是可以接受的限制吗?(另一种方法是使输出类似于
“items”:[{“itemName”:“key”,“movementStatus”:“USE”}]
-即使“items”成为字典列表。)此外,可以假设所有房间都是在任何门和项目之前定义的吗?您使用的模式不起作用:首先从流
输入数据中读取所有内容,然后再次尝试读取所有内容,但此时您处于文件末尾,所以第二次将不读取任何内容。我会使用另一种逻辑,但根据您所拥有的,您可以使用
input\u data.seek(0)
将流重置为开始。我无法执行。您能帮助我吗please@User1456我们不会帮你做家庭作业的。你对哪一点有问题?“每行循环”?试着编写一个程序,打开文件,读取每一行,然后打印出来。“忽略以#开头的行”?修改程序以不打印从#开始的行。“分裂成文字”?修改程序,将每一行(剩余的)拆分为一个列表,然后打印列表(而不是该行…..等等。一旦遇到问题,请过来询问我们*该特定问题”(一旦您检查到问题尚未在此处得到解答,可能是这样).Ohk@MartinBonner先生,我正在做,如果我被困在什么地方,希望你能帮助我