Cette fois, j'ai essayé de rendre la recherche Excel possible avec Python, je vais donc la mettre en mémo. Je suis heureux que vous puissiez l'utiliser comme référence.
https://gammasoft.jp/blog/excel-vlookup-by-python/ ↑ Cette fois, en me référant à ce site, j'ai essayé d'omettre ou de modifier des parties inutiles.
#Module pouvant faire fonctionner les fichiers Excel
import openpyxl
#Un module capable de formater et d'afficher des listes et des dictionnaires
from pprint import pprint
Cette fois, nous utiliserons openpyxl, qui vous permet d'exploiter des fichiers Excel, et un module capable appelé pprint, qui formate et affiche la liste. Il est possible de sortir ce qui peut être imprimé sans insérer de pprint, mais c'est très difficile à voir. Comparons. Résultat de sortie lors de l'utilisation de l'impression
[['Ritsuko Akizuki', 'Fairy', 19, 43, '"6/23"', '85 / 57/85 ', 156,' Qualification, Volunteer ',' A '], [' Chihaya Kisaragi ',' Fée ', 16, 41,' "2/25" ',' 72/55/78 ', 162,' Apprécier la musique, la photographie ',' A '], [' Shiho Kitazawa ',' Fée ', 14, 46, «1/18», «83 / 56/84», 161, «Trouvez votre livre d'images préféré», «A»], [«Shijo Takane», «Fée», 18, 49 , '"1/21"', '90 / 62/92 ', 169,' Observation astronomique, Histoire ',' B '], [' Julia ',' Fée ', 16, 43,' "9/26" ', '79 / 54/80', 157, 'Aucun', 'O'], ['Shiraishi Tsumugi', 'Fée', 17, 45, '"5/29"', '82 / 56/83 ' , 160, 'Garden / Sweetness Tour', 'AB'], ['Momoko Suo', 'Fairy', 11, 35, '"11/6"', '73 / 53/74 ', 140,' Cute Collectionner des phoques ',' B '], [' Tomoka Tenkubashi ',' Fairy ', 15, 41,' "11/11" ', '80 / 56/79', 156, 'Rendre les fans heureux Koto ',' AB '], [' Emi Tokoro ',' Fée ', 16, 47,' "4/15" ', '88 / 56/85', 159, 'Karaoké', 'O'], [ 'Nagayoshi Akira', 'Fée', 15, 41, '"9/20"', '79 / 59/78 ', 154,' Baseball ',' B '], [' Nikaido Chizuru ',' Fée ', 21, 50, '"10/21"', '85 / 58/86 ', 165,' Vérifier le magazine de vêtements au café ',' B '], [' Roko ',' Fairy ', 15, 42,' " 3/1 "', '78 / 57/77', 154, 'Faire des choses', 'AB'], ['Maihama Ayumu', 'Fée', 19, 49.9, '" 7/23 "', '86 / 60/88 ', 158,' Shopping ',' A '], [' Mizuki Makabe ',' Fairy ', 17, 43,' "1/23" ', '73 / 54/77', 160 , 'Trick', 'B'], ['Iori Minase', 'F aéré ', 15, 40,' "5/5" ', '77 / 54/79', 153, 'Voyage outre-mer, repas au restaurant', 'AB'], ['Shizuka Mogami', 'Fairy', 14, 44, '"9/14"', '76 / 53/77 ', 162,' Tennis ',' A '], [' Momose Rio ',' Fée ', 23, 46,' "11/21" ' , '84 / 57/84 ', 168,' Exercice de yoga ',' A ']]
Résultat de sortie lors de l'utilisation de pprint
[['Ritsuko Akizuki', 'Fairy', 19, 43, '"6/23"', '85 / 57/85 ', 156,' Qualification, Volunteer ',' A '], ['Chihaya Kisaragi', 'Fée', 16, 41, '"2/25"', '72 / 55/78 ', 162,' Apprécier la musique, la photographie ',' A '], ['Shiho Kitazawa', 'Fée', 14, 46, '"1/18"', '83 / 56/84 ', 161,' Trouvez votre livre d'images préféré ',' A '], ['Shijo Takane', 'Fairy', 18, 49, '"1/21"', '90 / 62/92 ', 169,' Astronomical Observation, History ',' B '], ['Julia', 'Fairy', 16, 43, '"9/26"', '79 / 54/80 ', 157,' None ',' O '], ['Shiraishi Tsumugi', 'Fairy', 17, 45, '"5/29"', '82 / 56/83 ', 160,' Garden / Sweet Place Tour ',' AB '], ['Momoko Suo', 'Fairy', 11, 35, '"11/6"', '73 / 53/74 ', 140,' Collecting cute stickers ',' B '], ['Tomoka Tenkubashi', 'Fée', 15, 41, '"11/11"', '80 / 56/79 ', 156,' Pour rendre les fans heureux ',' AB '], ['Emi Tokoro', 'Fairy', 16, 47, '"4/15"', '88 / 56/85 ', 159,' Karaoke ',' O '], ['Nagayoshi Akira', 'Fée', 15, 41, '"9/20"', '79 / 59/78 ', 154,' Baseball ',' B '], ['Nikaido Chizuru', 'Fairy', 21, 50, '"10/21"', '85 / 58/86 ', 165,' Check Apparel Magazine at cafe ',' B '], ['Loko', 'Fée', 15, 42, '"3/1"', '78 / 57/77 ', 154,' Faire des choses ',' AB '], ['Ayumu Maihama', 'Fairy', 19, 49.9, '"7/23"', '86 / 60/88 ', 158,' Shopping ',' A '], ['Mizuki Makabe', 'Fée', 17, 43, '"1/23"', '73 / 54/77 ', 160,' Trick ',' B '], ['Iori Minase', 'Fairy', 15, 40, '"5/5"', '77 / 54/79 ', 153,' Overseas travel, eat out ',' AB '], ['Shizuka Mogami', 'Fée', 14, 44, '"9/14"', '76 / 53/77 ', 162,' Tennis ',' A '], ['Rio Momose', 'Fairy', 23, 46, '"11/21"', '84 / 57/84 ', 168,' Yoga Exercise ',' A ']]
Bien sûr, il ne vous reste plus qu'à sortir les données! Dans une telle situation, l'impression est suffisante, mais cette fois le but est «Je veux chercher» et «Je veux voir facilement la liste qui correspond au contenu de la recherche», donc j'utiliserai pprint.
Puisque le but de cette fois est de rechercher le fichier Excel, il est nécessaire de lire les données d'origine.
#Spécifiez le chemin du fichier et chargez-le. Du chemin du fichier"\"Est interprété comme un caractère d'échappement"r"Pour éviter les erreurs en préfixant avec pour éviter les échappements.
wb = openpyxl.load_workbook(r"C:\Users\(Où se trouve le fichier)\Idolmastermillionlive_data.xlsx")
#Spécifiez le numéro d'index de la feuille de calcul à lire. Les nombres commencent à 0.
ws = wb.worksheets[0]
character_list = []
for row in ws["A2:I53"]:
values = []
for col in row:
values.append(col.value)
character_list.append(values)
La deuxième ligne demande à Openpyxl de lire le fichier que vous souhaitez rechercher cette fois. Le contenu de () est le chemin, mais si vous ne faites pas attention, vous obtiendrez l'erreur "Le codec 'unicode escape' ne peut pas décoder les octets en position 2-3: tronqué \ UXXXXXXXX escape". Je n'ai pas compris la signification de l'erreur car le chemin était correct et les caractères n'étaient pas défectueux. Cette erreur s'est produite lorsque l'ordinateur a mal interprété le délimiteur "" comme un "caractère d'échappement" lors de la spécification du chemin. J'ai donc utilisé le caractère brut pour annuler ce caractère d'échappement. C'est vrai, le "r" devant le chemin. Ce n'est pas une faute de frappe.
Oups, vous avez écrit quelque chose dans la déclaration for ci-dessous. Cela signifie lire une liste de la plage de cellules spécifiée, la traiter verticalement et la mettre dans une liste vide appelée valeurs.
Expliquer avec une image
Je veux d'abord rechercher cette plage, j'ai donc spécifié la cellule à lire ici. Dans ce cas, j'ai spécifié du n ° 2 de A à la cellule 53 de I (car le titre supérieur n'est pas nécessaire). Comme mentionné dans le site de référence mentionné ci-dessus, cette spécification est correcte tant qu'il n'y a pas de perte de données. Cependant, si les données sont manquantes, un autre processus est requis. Mais c'est une autre opportunité.
Alors cette fois Nous leur avons demandé de lire verticalement en groupe horizontalement. Et enfin, les données de Valeurs, qui contiennent les données de chaque personne sous forme de liste, sont placées dans une variable vide appelée "character_list". ~~ FOO ^ ~! Ça fait du bien! ~~
Faisons la partie recherche que tout le monde attendait.
#Exécution en boucle infinie
while True:
settargets = input("Lequel des «attributs», «nom», «taille», «3 tailles», «anniversaire», «âge», «hobby», «groupe sanguin» et «poids» doit être recherché?:")
#La recherche démarre en fonction de la valeur saisie dans les cibles définies
if settargets == "attribut":
attribute = input("Fairy,Princess,Entrez l'attribut avec l'un des anges:")
#Extraire les lignes qui correspondent aux conditions et à l'attribut_Mettre en liste
attribute_list = [d for d in character_list if d[1] == attribute]
#Affichage des résultats
pprint(attribute_list)
#Confirmez si vous souhaitez poursuivre la recherche
cont = input("Voulez-vous continuer la recherche?(Y/N):")
if cont == "Y" or cont == "y":
continue
elif cont == "N" or cont == "n":
break
else:
continue
#Effectuez le même processus ci-dessous
if settargets == "Nom":
name = input("S'il vous plaît entrez votre nom:")
name_list = [d for d in character_list if d[0] == name]
pprint(name_list)
cont = input("Voulez-vous continuer la recherche?(Y/N):")
if cont == "Y" or cont =="y":
continue
elif cont == "N" or cont == "n":
break
else:
continue
if settargets == "la taille":
hight = input("Veuillez entrer votre taille:")
hight_list = [d for d in character_list if d[6] == hight]
pprint(hight_list)
cont = input("Voulez-vous continuer la recherche?(Y/N):")
if cont =="Y" or cont == "y":
continue
elif cont == "N" or cont == "n":
break
else:
continue
if settargets == "3 tailles":
threesize = input("3 Veuillez saisir la taille:")
threesize_list = [d for d in character_list if d[5] == threesize]
pprint(threesize_list)
cont = input("Voulez-vous continuer la recherche?(Y/N):")
if cont == "Y" or cont == "y":
continue
elif cont == "N" or cont == "n":
break
else:
continue
if settargets =="anniversaire":
birthday = input("Entez votre date de naissance s'il vous plaît:")
birthday_list = [d for d in character_list if d[4] == birthday]
pprint(birthday_list)
cont = input("Voulez-vous continuer la recherche?(Y/N):")
if cont == "Y" or cont == "y":
continue
elif cont == "N" or cont == "n":
break
else:
continue
if settargets == "âge":
age = input("Veuillez entrer votre âge:")
age_list = [d for d in character_list if d[2] == age]
pprint(age_list)
cont = input("Voulez-vous continuer la recherche?(Y/N):")
if cont == "Y" or cont == "y":
continue
elif cont == "N" or cont =="n":
break
else:
continue
if settargets == "loisir":
hobby = input("Veuillez entrer votre passe-temps:")
hobby_list = [d for d in character_list if d[7] == hobby]
pprint(hobby_list)
cont = input("Voulez-vous continuer la recherche?(Y/N):")
if cont == "Y" or cont == "y":
continue
elif cont == "N" or cont == "n":
break
else:
continue
if settargets == "groupe sanguin":
bloodtype = input("S'il vous plaît entrez votre nom:")
bloodtype_list = [d for d in character_list if d[8] == bloodtype]
pprint(bloodtype_list)
cont = input("Voulez-vous continuer la recherche?(Y/N):")
if cont == "Y" or cont =="y":
continue
elif cont == "N" or cont == "n":
break
else:
continue
if settargets == "poids":
weight = input("Veuillez entrer votre poids:")
weight_list = [d for d in character_list if d[3] == weight]
pprint(weight_list)
cont = input("Voulez-vous continuer la recherche?(Y/N):")
if cont == "Y" or cont == "y":
continue
elif cont == "N" or cont =="n":
break
else:
continue
else:
print('Veuillez modifier le mot-clé et réessayer.(Exemple:Anniversaire 29 décembre →"12/29")')
break
Cela fait longtemps, mais une fois que vous l'écrivez, vous n'avez qu'à copier et coller autant que vous en avez besoin, donc c'est facile. Cette fois, je voulais pouvoir rechercher autant de fois que je le voulais, j'ai donc décidé d'utiliser une boucle infinie.
Tout d'abord, définir des objectifs au début demande à l'utilisateur "quelles données voulez-vous rechercher?" Ensuite, la recherche est effectuée sur la base des conditions de recherche spécifiées par les cibles définies. Par exemple, pour expliquer dans le premier bloc, si vous êtes invité à rechercher par "attribut", demandez "quel attribut idole vous voulez voir" et mettez le résultat dans attribut. Après cela, "liste_attributs, qui a le même attribut (attribut saisi par l'utilisateur) que celui qui se trouve en premier lieu des données, reçoit l'instruction d'être inclus dans la liste. La première des données est
C'est ici. Si vous le comptez normalement, ce sera le second. Par conséquent, demandez à toutes les données de voir «La deuxième (première) des données correspond-elle au caractère spécifié?». Au fait, la manière d'écrire que l'instruction for est incluse dans cette liste est appelée "notation d'inclusion de liste", mais je pensais qu'elle pouvait être écrite même si elle était séparée normalement, mais j'ai eu une erreur et j'ai continué. Je ne l'avais pas, j'ai donc dû le faire avec la notation d'inclusion de liste. Je me souviens que l'erreur qui s'est produite à ce moment-là était quelque chose comme "Les données de type Int ne peuvent pas être décorées!". J'ai essayé diverses choses, mais pour une raison quelconque, j'ai eu cette erreur et je n'ai pas pu la résoudre.
Les "données qui remplissent les conditions" résultantes s'affichent. Après cela, j'ai demandé "Voulez-vous continuer la recherche après cela?" C'est aussi simple que de taper Y pour continuer, de taper N pour interrompre, et même si un autre caractère est entré, mais c'était très pratique.
C'est épicé quand vous le faites, mais lorsque vous commencez à l'utiliser, vous pouvez gagner du temps et ressentir E! Je veux un site qui peut faire une recherche de profil même officiellement ... mais il peut y avoir () Eh bien, j'ai déjà sommeil, donc par ici. Baicha.
Recommended Posts