Afficher les valeurs de ligne de openpyxl
Dans le csv module en python, il existe une fonction appelée csv.reader
qui permet d'itérer sur une ligne, retourne un objet de lecteur et ne peut être conservée dans un récipient comme une liste.
Ainsi, lorsque la liste affectée à une variable et est imprimé, c'est à dire:
csv_rows = list(csv.reader(csvfile, delimiter=',', quotechar='|'))
print (csv_rows)
>
>
>
[['First Name', 'Last Name', 'Zodicac', 'Date of birth', 'Sex'] # I gave an example of the function outputting a header row
Jusqu'à présent, je ne vois pas une fonction similaire de ce genre dans la openpyxl. J'ai peut être confondu avec alors je me demandais si l'un de vous peut m'aider.
Mise à jour
@alecxe, votre solution fonctionne parfaitement (à l'exception de son casting ma date de naissance comme un format datetime au lieu d'un régulier de la chaîne).
def iter_rows(ws):
for row in ws.iter_rows():
yield [cell.value for cell in row]
>
>
>>> pprint(list(iter_rows(ws)))
[['First Nam', 'Last Name', 'Zodicac', 'Date of birth', 'Sex'], ['John', 'Smith', 'Snake', datetime.datetime(1989, 9, 4, 0, 0), 'M']]
Depuis que je suis un débutant, je voulais savoir comment cela fonctionnerait si j'ai utilisé une boucle for au lieu d'une compréhension de liste.
J'ai donc utilisé ce:
def iter_rows(ws):
result=[]
for row in ws.iter_rows()
for cell in row:
result.append(cell.value)
yield result
Il presque me donne exactement la même sortie, au lieu qu'il me donne ceci:
Comme vous pouvez le dire, pour l'essentiel, donne-moi une gigantesque liste au lieu de la liste imbriquée dans le résultat que vous m'avez donné.
>>>print(list(iter_rows(ws)))
[['First Nam', 'Last Name', 'Zodicac', 'Date of birth', 'Sex', 'David', 'Yao', 'Snake', datetime.datetime(1989, 9, 4, 0, 0), 'M']]
OriginalL'auteur dyao | 2015-07-06
Vous devez vous connecter pour publier un commentaire.
iter_rows()
a probablement un sens analogue:Vous pouvez la modifier un peu pour obtenir une liste des valeurs de ligne, par exemple:
Démo:
Je suis curieux, est-il possible de ne convertir que la compréhension de liste dans une boucle for? (juste fmi) jusqu'à présent, en ajoutant chaque valeur de cellule à une liste vide, puis
yield
la liste ne me donne pas le même résultat que votre solutionje vous remercie pour les aimables paroles et une question intéressante. Veux juste clarifier les points suivants. Quel est votre résultat souhaité et quel résultat obtenez-vous actuellement?
Merci pour la réponse, je vais aller de l'avant et de mettre à jour/modifier le post original (je l'ai fait ci-dessus.
Bon, l'OP est mis à jour pour votre examen. Je suis au lit, je vais vérifier votre réponse, parfois de demain. Merci encore!
OriginalL'auteur alecxe
Je l'ai eu à travailler à l'aide de cette méthode:
Essentiellement, j'ai créé une liste de toutes les données.
Ensuite, j'ai réitéré à travers chaque ligne de la feuille de calcul.
Chaque
cell.value
au sein d'une ligne a été ajoutée à court terme de la liste (ligne actuelle).Une fois que tous les
cell.values
à l'intérieur de la ligne sont ajoutés à court terme, la liste, à court terme, la liste est ajouté à la longue liste de termes.OriginalL'auteur Joseph Zullo