Je souhaite convertir mes données sous cette forme en syntaxe YAML (de préférence sans utiliser de pandas ni installer de nouvelles bibliothèques)

Exemple de données dans Excel:

users | name | uid | shell

user1 | nino | 8759 | /bin/ksh

user2 | vivo | 9650 | /bin/sh

Format de sortie souhaité: Sortie de la syntaxe YAML

0
Sanjana SG 26 août 2020 à 15:08

2 réponses

Meilleure réponse

Vous pouvez le faire en utilisant des opérations sur les fichiers. Puisque vous aimez * "de préférence sans utiliser de pandas ni installer de nouvelles bibliothèques

Hypothèse: Le "|" le symbole sert à indiquer les colonnes et n'est pas un délimiteur ou un séparateur

Étape 1

Save the excel file as CSV

Puis exécutez le code

Code

# STEP 1  : Save your excel file as CSV

ctr = 0
excel_filename = "Book1.csv"
yaml_filename = excel_filename.replace('csv', 'yaml')
users = {}

with open(excel_filename, "r") as excel_csv:
    for line in excel_csv:
        if ctr == 0:
            ctr+=1  # Skip the coumn header
        else:
            # save the csv as a dictionary
            user,name,uid,shell = line.replace(' ','').strip().split(',')
            users[user] = {'name': name, 'uid': uid, 'shell': shell}



with open(yaml_filename, "w+") as yf :
    yf.write("users: \n")
    for u in users:
        yf.write(f"  {u} : \n")
        for k,v in users[u].items():
            yf.write(f"    {k} : {v}\n")

Production

users: 
  user1 : 
    name : nino
    uid : 8759
    shell : /bin/ksh
  user2 : 
    name : vivo
    uid : 9650
    shell : /bin/sh
0
Abhishek Prusty 26 août 2020 à 14:33

Vous pouvez le faire, dans votre cas, vous feriez simplement pd.read_excel au lieu de pd.read_csv:

df = pd.read_csv('test.csv', sep='|')
df['user_col'] = 'users'
data = df.groupby('user_col')[['users', 'name','uid','shell']].apply(lambda x: x.set_index('users').to_dict(orient='index')).to_dict()
with open('newtree.yaml', "w") as f:
    yaml.dump(data, f)

Le fichier Yaml ressemble à ceci:

users:
  user1:
    name: nino
    shell: /bin/ksh
    uid: 8759
  user2:
    name: vivo
    shell: /bin/sh
    uid: 9650
0
NYC Coder 26 août 2020 à 13:23