XLRD / Python: Lecture de fichier Excel en dict avec des boucles
Je suis à la recherche de lire dans un classeur Excel avec 15 champs, et près de 2000 lignes, et de convertir chaque ligne d'un dictionnaire en Python. Je veux ajouter chaque dictionnaire à une liste. J'aimerais que chaque champ dans la rangée du haut du classeur à être une clé dans chaque dictionnaire, et ont la cellule correspondante de la valeur de la valeur dans le dictionnaire. Je l'ai déjà regardé des exemples ici et icimais j'aimerais faire quelque chose d'un peu différent. Le deuxième exemple de travail, mais j'ai l'impression qu'il serait plus efficace en boucle sur la rangée du haut pour remplir les clés de dictionnaire et puis itérer sur chaque ligne pour obtenir les valeurs. Mon fichier Excel contenant les données à partir des forums de discussion et ressemble à quelque chose comme ceci (évidemment avec plus de colonnes):
id thread_id forum_id post_time votes post_text
4 100 3 1377000566 1 'here is some text'
5 100 4 1289003444 0 'even more text here'
Donc, j'aimerais les champs id
thread_id
et ainsi de suite, pour être les clés de dictionnaire. J'aimerais que mes dictionnaires pour ressembler à:
{id: 4,
thread_id: 100,
forum_id: 3,
post_time: 1377000566,
votes: 1,
post_text: 'here is some text'}
D'abord, j'ai eu un code comme celui-ci d'une itération dans le fichier, mais mon champ d'action est mal pour certaines de la part des boucles et je suis générant trop de dictionnaires. Voici mon code initial:
import xlrd
from xlrd import open_workbook, cellname
book = open('forum.xlsx', 'r')
sheet = book.sheet_by_index(3)
dict_list = []
for row_index in range(sheet.nrows):
for col_index in range(sheet.ncols):
d = {}
# My intuition for the below for-loop is to take each cell in the top row of the
# Excel sheet and add it as a key to the dictionary, and then pass the value of
# current index in the above loops as the value to the dictionary. This isn't
# working.
for i in sheet.row(0):
d[str(i)] = sheet.cell(row_index, col_index).value
dlist.append(d)
Toute aide serait grandement appréciée. Merci d'avance pour la lecture.
source d'informationauteur kylerthecreator
Vous devez vous connecter pour publier un commentaire.
L'idée est, d'abord, de lire l'en-tête dans la liste. Ensuite, effectuer une itération sur la feuille de lignes (à partir de la prochaine après l'en-tête), créer un nouveau dictionnaire basé sur des clés d'en-tête et appropriée les valeurs des cellules et l'ajouter à la liste de dictionnaires:
Pour une feuille contenant:
il imprime:
UPD (en élargissant le dictionnaire de la compréhension):
Essayer celui-ci.
Cette fonction ci-dessous sera de retour générateur contient dict de chaque ligne et chaque colonne.
Cette réponse m'a beaucoup aidée! J'ai été de jongler avec une façon de faire cela pendant environ deux heures. Ensuite, j'ai trouvé cet élégant et à réponse courte. Merci!
J'ai besoin d'un moyen pour convertir xls au format json à l'aide des touches.
Donc j'ai adapté le script ci-dessus avec un json instruction d'impression comme suit:
Essayez d'abord le configurer vos touches par l'analyse de la première ligne, toutes les colonnes, une autre fonction pour analyser les données, puis de les appeler dans l'ordre.
Ce script vous permettent de transformer des données excel de liste de dictionnaire