2010-09-15 5 views
2

Comment puis-je coder pour lire la première ligne d'un fichier et la mettre comme valeur clé d'un dictionnaire et continuer à lire les valeurs suivantes de manière itérative et les mettre comme valeurs à la clé particulière qu'ils tombent dans le fichier. Comme exemple:Gestion de la lecture de fichiers et de plusieurs valeurs dans une clé du dictionnaire

Item Quality Cost Place

Ball  1  $12 TX 
Umbrella 5  $35 NY 
sweater 89  $100 LA 

Voici donc, la représentation est mon dossier. Quand je lis, je veux que le dictionnaire soit créé comme dans les choses en caractères gras, et quand je continue à lire les lignes ci-dessous, je les ferais en tant que valeurs multiples dans les clés respectives.

grâce

+2

J'ai reformaté le Q pour que le fichier apparaisse plus clairement (nombre arbitraire d'espaces en tant que séparateur pour aligner les colonnes visuellement, pas un seul espace ou tabulation). –

Répondre

0

Vous ne pouvez pas avoir de "valeurs multiples" pour une clé donnée, mais vous pouvez bien sûr avoir une valeur par clé qui est une liste.

Par exemple (Python 2.6 ou mieux - tout simplement parce que j'utilise la fonction next pour la généralité plutôt que des méthodes telles que readline, mais vous pouvez bien sûr tweak qui!):

def makedictwithlists(f): 
    keys = next(f).split() 
    d = {} 
    for k in keys: d[k] = [] 
    for line in f: 
     for k, v in zip(keys, line.split()): 
      d[k].append(v) 
    return d 
1

On dirait que vous décrivez un fichier csv avec un séparateur d'espace. Quelque chose comme ça devrait fonctionner (from the Python help). En fait, le csv.DictReader serait mieux

>>> import csv 
>>> spamReader = csv.reader(open('eggs.csv', 'rb'), delimiter=' ', quotechar='|') 
>>> for row in spamReader: 
...  print ', '.join(row) 
Spam, Spam, Spam, Spam, Spam, Baked Beans 
Spam, Lovely Spam, Wonderful Spam 

afin d'avoir chaque ligne comme un dictionnaire avec les touches définies par la première ligne.

Je suppose qu'il y a une nouvelle ligne insérée après chaque groupe de valeurs.

Modifier: En utilisant l'exemple ci-dessus, nous obtenons:

In [1]: import csv 

In [2]: f = csv.DictReader(open('test.txt', 'r'), delimiter = ' ', skipinitialspace = True) 

In [3]: for row in f: print row 

{'Item': 'Ball', 'Cost': '$12', 'Quality': '1', 'Place': 'TX'} 
{'Item': 'Umbrella', 'Cost': '$35', 'Quality': '5', 'Place': 'NY'} 
{'Item': 'sweater', 'Cost': '$100', 'Quality': '89', 'Place': 'LA'} 

En passant le paramètre skipinitialspace = True au DictReader est nécessaire pour être en mesure de se débarrasser des multiples espaces sans créer des entrées parasites dans chaque ligne .

+0

je suis désolé .. il n'est pas montré correctement ici mais ce n'est pas un fichier csv .. ITA un fichier ayant un format tabulaire comme les gras sont des en-têtes et le reste sont des valeurs sous eux – Compuser7

+0

Compuser7. Oui j'ai compris ça. C'est pourquoi vous utiliseriez 'delimiter = ''. Le csv de Python fonctionne également pour les formats tabulaires si vous choisissez le bon délimiteur. –

+0

@ Compuser7, j'ai reformaté votre Q pour montrer le fichier correctement - et mon A suppose un nombre arbitraire d'espaces comme séparateurs, tout comme votre fichier semble l'avoir. –

Questions connexes