La colonne d'Excel A a de nombreuses lignes avec des valeurs différentes. Exemple:
wb = load_workbook("Workbook.xlsx") ws = wb.active sheet = wb["Sheet"] for fila in ws.iter_rows('A2:A7'): for celda in fila: if celda.value != celda.offset(-1, 0).value: print(celda.row)
3 Réponses :
Si vous souhaitez modifier le moins possible dans votre code actuel, je vous suggère de stocker la dernière valeur dans une sorte de variable temporaire que vous écrivez à chaque fois que vous passez à la ligne suivante. Vous comparez le code de pays de la ligne actuelle au code de pays de la ligne précédente et, s'ils sont différents, vous imprimez l'index de la ligne. Si l'index de la ligne n'est pas facilement accessible, vous pouvez implémenter votre propre variable de compteur qui suit l'index sur lequel vous vous trouvez. Il peut y avoir des solutions plus élégantes disponibles, mais celles-ci fonctionneront.
Voici un exemple de la mise en œuvre que j'ai décrite ci-dessus: p> Vous voudrez peut-être trouver un autre moyen d'attribuer la variable temporaire la première fois. Cela imprimera la première valeur, peu importe quoi. P> La solution upvote la plus haute ICI fournit une solution plus élégante pour la question de l'impression du problème de l'index. En plus, Cette Documentation nous dit qu'il y a un moyen plus propre d'ouverture et de lecture de la fichier (voir la section "lecture seule"). p> p>
Bien que je pense que la réponse est techniquement correcte un petit échantillon de code faciliterait la tâche de comprendre.
Je ne fais généralement pas cela pour empêcher le collecteur copier de premier cycle;). Je pense aussi que cela serait plus utile que les apprenants aient à la mettre en œuvre eux-mêmes. Je peux ajouter ça.
J'apprécie vous éditer le poste et vous fournir plus d'informations. Le problème avec votre code est qu'il ne différenciera pas s'il existe une nouvelle valeur, mais ne va attrapera que si la valeur de la cellule n'est pas vide.
@Franj oups; Je n'ai pas inclus la mise à jour de la température ..... ajoutant que dans le présent. Basé sur l'explication originale présente, cependant, vous saurez que cela est mis à jour par l'itération et que je manquais cela de mon code
L'approche la plus simple est peut-être l'approche la plus simple utilise zip code>, mais cela nécessitera de charger toutes les lignes à la mémoire et de créer 2 listes, ce qui peut être délicat si vous avez réellement 2 millions de lignes:
2
4
6
8
9
10
11
C'est une bonne approche. Il ne résout pas vraiment la question car elle ne met pas en œuvre OpenPycYXL, mais je l'ai passé. J'ai trouvé une alternative que j'ai ajoutée comme édition. Si vous souhaitez mettre à jour votre code et que cela fonctionne, je vais marquer votre réponse comme la bonne.
Pour garder une trace de la valeur de la valeur modifiée, vous pouvez utiliser une variable pour enregistrer la dernière valeur: le que vous l'utilisez comme: p> J'ai oublié comment obtenir la valeur de la première colonne à partir d'une ligne de feuille de calcul OpenPyXL, veuillez mettre à jour la fonction Cell_A_Value CODE> si nécessaire. P> P>
C'est une bonne approche, mais ne résout pas totalement la question. Par conséquent, je viens de gifier votre publication. Si vous voulez modifier, et cela fonctionne bien, je vais marquer votre réponse comme le bon. Pour l'instant, j'ai trouvé une solution temporaire que j'ai ajoutée comme édition.