Essayez de rechercher un profil d'un million de caractères en Python

introduction

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.

Des sites qui ont été grandement aidés

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.

Importation de module


#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.

Lire le fichier Excel

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 image.png

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 image.png 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! ~~

Créer la partie de recherche

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 image.png

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.

résultat

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

Essayez de rechercher un profil d'un million de caractères en Python
Essayez d'envoyer un paquet SYN en Python
Essayez de dessiner une animation simple en Python
Obtenez un jeton pour conoha avec python
Essayez un tube de programmation fonctionnel en Python
Calculons en fait le problème statistique avec Python
Essayez de calculer RPN avec Python (pour les débutants)
Essayez gRPC en Python
Essayez 9 tranches en Python
Recherche d'un moyen efficace d'écrire un Dockerfile avec Python avec de la poésie
Essayez de créer un module Python en langage C
[Python] Comment développer des variables dans une chaîne de caractères
Essayez d'incorporer Python dans un programme C ++ avec pybind11
Définir le proxy pour Python pip (décrit dans pip.ini)
Prendre une capture d'écran en Python
Créer une fonction en Python
Créer un dictionnaire en Python
Techniques de tri en Python
Essayez LINE Notify avec Python
Créer un bookmarklet en Python
Implémentons Yuma dans Python 3
Dessinez un cœur en Python
Code de caractère appris en Python
À propos de "for _ in range ():" de python
Essayez d'exécuter python dans l'environnement Django créé avec pipenv
Essayez de créer le format de fichier DeepZoom .DZI en Python
Publication d'une bibliothèque qui masque les données de caractères dans les images Python
Créer un compte enfant de connect with Stripe en Python
Essayez une recherche similaire de recherche d'images à l'aide du SDK Python [Recherche]
Création d'un environnement de développement pour les applications Android - Création d'applications Android avec Python
Un moyen simple d'éviter plusieurs boucles for en Python
Comment définir plusieurs variables dans une instruction Python for
Essayez de créer un réseau de neurones en Python sans utiliser de bibliothèque
Essayez d'exécuter une fonction écrite en Python à l'aide de Fn Project
Essayez simplement de recevoir un webhook avec ngrok et Python
Concurrence avec VS Code Créez un environnement Python pour les professionnels sous Windows
Rechercher les fuites de mémoire dans Python
Probablement dans un serpent Nishiki (Titre original: Peut-être en Python)
Ecrire une dichotomie en Python
Azure Functions: essayez des fonctions durables pour Python
[python] Gérer les fonctions dans une liste
Rechercher des commandes externes avec python
Appuyez sur une commande en Python (Windows)
Un bref résumé de Graphviz en python (expliqué uniquement pour mac)
Essayez d'obtenir la liste des fils du bulletin d'information (je n'aime pas) avec Python.
Que diriez-vous d'Anaconda pour créer un environnement d'apprentissage automatique avec Python?
Créer un conteneur DI avec Python
[Introduction à Python] Comment générer une chaîne de caractères dans une instruction Print
ABC166 en Python A ~ C problème
Essayez d'utiliser virtualenv qui peut créer un environnement virtuel de Python
Ecrire des algorithmes A * (A-star) en Python
Supprimer un caractère spécifique en Python s'il s'agit du dernier
Essayez d'extraire une chaîne de caractères d'une image avec Python3
Essayez d'utiliser LevelDB avec Python (plyvel)
Essayons Fizz Buzz avec Python
Créer un fichier binaire en Python
Essayez de calculer Trace en Python