如何在 python 中输入 yaml 格式??(不使用 pyyaml 库)

how can i get yaml format with input in python ??(without using pyyaml library)

我想从yaml中的输入中获取数据format.The数据包括用户信息和每个用户拥有的音乐专辑信息purchased.Input信息如下:

2 # this line specify the number of users
- name: user1
  age: 18
  city: city1
  albums:
    - album1
    - album2
    - album3
- name: user2
  age: 20
  city: city2
  albums:
    - album2
    - album1
    - alubm3
3 # this line specify the number of albums 
- name: album1
  singer: singer1
  genre: classic
  tracks: 10
- name: album2
  singer: singer2
  genre: pop
  tracks: 22
- name: album3
  singer: singer3
  genre: pop
  tracks: 14

我为此编写了以下代码

num_user = int(input())

users_data = {}
albums_data = {}

for i in range(num_user):
    name, age, city = input().split()[-1], input().split()[-1], input().split()[-1]
    input()
    albums=[]
    next_line = input()
    while next_line.split()[0]=='-' and len(next_line)-len(next_line.lstrip(' '))==4:
        albums.append(next_line.split()[-1])
        next_line = input()
    if len(next_line.split()) < 2:
        num_albums = int(next_line)
    users_data[name]=[age, city, albums]
for i in range(num_albums):
    name, singer, genre, tracks = input().split()[-1],input().split()[-1],\
            input().split()[-1], input().split()[-1]
    albums_data[name]=[singer, genre, tracks]

一切正常,直到用户数量超过一个人,我无法将第二个用户信息存储在字典中,所有移动信息都存储了。 我想要这个:

{'user1': ['18', 'city1', ['album1', 'album2', 'album3']], 'user2': ['20', 'city2', ['album2', 'album1', 'alubm3']]} {'album1': ['singer1', 'classic', '10'], 'album2': ['beeptunes', 'pop', '22'], 'tekunbede': ['beeptunes', 'pop', '14']}

但是得到这个:

{'user1': ['18', 'city1', ['album1', 'album2', 'album3']], '20': ['city2', 'albums:', ['album1', 'alubm3']]} {'album1': ['singer1', 'classic', '10'], 'album2': ['beeptunes', 'pop', '22'], 'tekunbede': ['beeptunes', 'pop', '14']}

问题似乎是,一旦您为第一个用户处理了最后一张专辑,您就会再次调用 input() 来获取名称。将输入与处理分离将有助于解决问题,因此请查看创建一个函数来处理检测到的名称。

所以尝试:

  1. 读取输入
  2. 根据输入找出要做什么
  3. 处理读取的数据
num_user = int(input())

users_data = {}
albums_data = {}

for i in range(num_user):
    name, age, city = input().split()[-1], input().split()[-1], input().split()[-1]
    input()
    albums=[]
    next_line = input()
    while next_line.split()[0]=='-' and len(next_line)-len(next_line.lstrip(' '))==4:
        albums.append(next_line.split()[-1])
        next_line = input() # This is the line with the issue
    if len(next_line.split()) < 2:
        num_albums = int(next_line)
    users_data[name]=[age, city, albums]
for i in range(num_albums):
    name, singer, genre, tracks = input().split()[-1],input().split()[-1],\
            input().split()[-1], input().split()[-1]
    albums_data[name]=[singer, genre, tracks]