Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/python-3.x/19.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何使用python中的输入获取yaml格式??(不使用pyyaml库)_Python_Python 3.x_Input_Yaml_Pyyaml - Fatal编程技术网

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

如何使用python中的输入获取yaml格式??(不使用pyyaml库),python,python-3.x,input,yaml,pyyaml,Python,Python 3.x,Input,Yaml,Pyyaml,我想从yaml格式的输入中获取数据。数据包括每个用户购买的用户信息和音乐专辑信息。输入信息如下: 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 - album

我想从yaml格式的输入中获取数据。数据包括每个用户购买的用户信息和音乐专辑信息。输入信息如下:

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']], '20': ['city2', 'albums:', ['album1', 'alubm3']]} {'album1': ['singer1', 'classic', '10'], 'album2': ['beeptunes', 'pop', '22'], 'tekunbede': ['beeptunes', 'pop', '14']}

问题似乎是,一旦您为第一个用户处理了最后一个相册,您就会再次调用input(),这将获得名称。将输入与处理分离将有助于解决问题,因此,请看一下创建一个函数,以便在检测到名称后处理名称

因此,请尝试:

  • 读取输入
  • 根据输入计算出你要做什么
  • 处理读取的数据
  • num\u user=int(input())
    用户_data={}
    相册_数据={}
    对于范围内的i(num_用户):
    姓名、年龄、城市=输入().split()[-1],输入().split()[-1],输入().split()[-1]
    输入()
    相册=[]
    下一行=输入()
    而next_line.split()[0]='-'和len(next_line)-len(next_line.lstrip('')==4:
    albums.append(下一行.split()[-1])
    next_line=input()#这是问题所在的行
    如果len(next_line.split())小于2:
    num\u albums=int(下一行)
    用户\u数据[姓名]=[年龄、城市、相册]
    对于范围内的i(num_相册):
    姓名、歌手、流派、曲目=输入().split()[-1],输入().split()[-1]\
    input().split()[-1],input().split()[-1]
    专辑数据[姓名]=[歌手、流派、曲目]
    
    问题似乎是,一旦您为第一个用户处理了最后一张相册,您将再次调用input(),这将获取名称。将输入与处理分离将有助于解决问题,因此,请看一下创建一个函数,以便在检测到名称后处理名称

    因此,请尝试:

  • 读取输入
  • 根据输入计算出你要做什么
  • 处理读取的数据
  • num\u user=int(input())
    用户_data={}
    相册_数据={}
    对于范围内的i(num_用户):
    姓名、年龄、城市=输入().split()[-1],输入().split()[-1],输入().split()[-1]
    输入()
    相册=[]
    下一行=输入()
    而next_line.split()[0]='-'和len(next_line)-len(next_line.lstrip('')==4:
    albums.append(下一行.split()[-1])
    next_line=input()#这是问题所在的行
    如果len(next_line.split())小于2:
    num\u albums=int(下一行)
    用户\u数据[姓名]=[年龄、城市、相册]
    对于范围内的i(num_相册):
    姓名、歌手、流派、曲目=输入().split()[-1],输入().split()[-1]\
    input().split()[-1],input().split()[-1]
    专辑数据[姓名]=[歌手、流派、曲目]
    
    为什么“不使用pyyaml库”?正确的解析器,无论是PyYAML还是ruamel.yaml,都是正确的解决方案。因为这是一个实践问题,要求不要在solution@ChrisWhy中使用库“而不使用PyYAML库”?正确的解析器,无论是PyYAML还是ruamel.yaml,都是正确的解决方案。因为这是一个实践问题,要求不要在solution@Chris中使用库
    {'user1': ['18', 'city1', ['album1', 'album2', 'album3']], '20': ['city2', 'albums:', ['album1', 'alubm3']]} {'album1': ['singer1', 'classic', '10'], 'album2': ['beeptunes', 'pop', '22'], 'tekunbede': ['beeptunes', 'pop', '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() # 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]