Versuchen Sie, in Python nach einem Profil mit einer Million Zeichen zu suchen

Einführung

Dieses Mal habe ich versucht, die Excel-Suche mit Python zu ermöglichen, daher werde ich sie als Memo einfügen. Ich bin froh, wenn Sie es als Referenz verwenden können.

Websites, denen sehr geholfen wurde

https://gammasoft.jp/blog/excel-vlookup-by-python/ ↑ Dieses Mal habe ich unter Bezugnahme auf diese Site versucht, unnötige Teile wegzulassen oder zu ändern.

Modulimport


#Modul, das Excel-Dateien bedienen kann
import openpyxl

#Ein Modul, das Listen und Wörterbücher formatieren und anzeigen kann
from pprint import pprint

Dieses Mal verwenden wir openpyxl, mit dem Sie Excel-Dateien bedienen können, und ein leistungsfähiges Modul namens pprint, das die Liste formatiert und anzeigt. Es ist möglich, das auszugeben, was durch Drucken ausgegeben werden kann, ohne pprint einzufügen, aber es ist sehr schwer zu erkennen. Lass uns vergleichen. Ausgabeergebnis bei Verwendung von Druck

[['Ritsuko Akizuki', 'Fairy', 19, 43, '' 6/23 '', '85 / 57/85 ', 156,' Qualifikation, Freiwilliger ',' A '], [' Chihaya Kisaragi ',' Fairy ', 16, 41,' '2/25' ', '72 / 55/78', 162, 'Musik, Fotografie schätzen', 'A'], ['Shiho Kitazawa', 'Fairy', 14, 46, '"1/18"', '83 / 56/84 ', 161,' Finde dein Lieblingsbilderbuch ',' A '], [' Shijo Takane ',' Fairy ', 18, 49 , "1/21", "90 / 62/92", 169, "Astronomische Beobachtung, Geschichte", "B"], ["Julia", "Fee", 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, "Cute" Siegel sammeln ',' B '], [' Tomoka Tenkubashi ',' Fairy ', 15, 41,' '11/11' ', '80 / 56/79', 156, 'Fans glücklich machen Koto ',' AB '], [' Emi Tokoro ',' Fairy ', 16, 47,' '4/15' ', '88 / 56/85', 159, 'Karaoke', 'O'], [ 'Nagayoshi Akira', 'Fairy', 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 the Cafe", "B"], ["Roko", "Fairy", 15, 42, " 3/1 "', '78 / 57/77', 154, 'Making things', 'AB'], ['Maihama Ayumu', 'Fairy', 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. luftig ', 15, 40,' '5/5' ', '77 / 54/79', 153, 'Übersee reisen, auswärts essen', 'AB'], ['Shizuka Mogami', 'Fee', 14, 44, "9/14", "76 / 53/77", 162, "Tennis", "A"], ["Momose Rio", "Fairy", 23, 46, "11/21" , '84 / 57/84 ', 168,' Yoga Exercise ',' A ']]

Ausgabeergebnis bei Verwendung von pprint

[['Ritsuko Akizuki', 'Fee', 19, 43, '' 6/23 '', '85 / 57/85 ', 156,' Qualifikation, Freiwilliger ',' A '], ['Chihaya Kisaragi', 'Fairy', 16, 41, '' 2/25 '', '72 / 55/78 ', 162,' Musik, Fotografie schätzen ',' A '], ['Shiho Kitazawa', 'Fairy', 14, 46, '"1/18"', '83 / 56/84 ', 161,' Finde dein Lieblingsbilderbuch ',' 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,' Cute Sticker Collection ',' B '], ['Tomoka Tenkubashi', 'Fairy', 15, 41, '"11/11"', '80 / 56/79 ', 156,' Um Fans glücklich zu machen ',' AB '], ['Emi Tokoro', 'Fairy', 16, 47, '' 4/15 '', '88 / 56/85 ', 159,' Karaoke ',' O '], ['Nagayoshi Akira', 'Fairy', 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', 'Fairy', 15, 42, '3/1', '78 / 57/77 ', 154,' Making things ',' AB '], ['Ayumu Maihama', 'Fairy', 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', 'Fairy', 15, 40, '' 5/5 '', '77 / 54/79 ', 153,' Übersee-Reisen, Essen gehen ',' AB '], ['Shizuka Mogami', 'Fairy', 14, 44, '' 9/14 '', '76 / 53/77 ', 162,' Tennis ',' A '], ['Momose Rio', 'Fairy', 23, 46, '11 / 21 ', '84 / 57/84', 168, 'Yoga Exercise', 'A']]

Natürlich müssen Sie nur die Daten ausgeben! In einer solchen Situation ist das Drucken ausreichend, aber dieses Mal lautet der Zweck "Ich möchte suchen" und "Ich möchte die Liste, die dem Suchinhalt entspricht, leicht sehen", daher verwende ich pprint.

Excel-Datei lesen

Da der Zweck dieser Zeit darin besteht, die Excel-Datei zu durchsuchen, müssen die Originaldaten gelesen werden.

#Geben Sie den Dateipfad an und laden Sie ihn. Vom Dateipfad"\"Wird als Escape-Zeichen interpretiert"r"Um Fehler durch Präfixe zu vermeiden, um ein Entkommen zu verhindern.
wb = openpyxl.load_workbook(r"C:\Users\(Wo die Datei ist)\Idolmastermillionlive_data.xlsx")

#Geben Sie die Indexnummer des zu lesenden Arbeitsblatts an. Zahlen beginnen bei 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)

In der zweiten Zeile wird Openpyxl aufgefordert, die Datei zu lesen, nach der Sie diesmal suchen möchten. Der Inhalt von () ist der Pfad. Wenn Sie jedoch nicht vorsichtig sind, wird die Fehlermeldung "Unicode-Escape-Codec kann Bytes an Position 2-3 nicht dekodieren: abgeschnittenes \ UXXXXXXXX-Escape" angezeigt. Ich habe die Bedeutung des Fehlers nicht verstanden, weil der Pfad korrekt war und die Zeichen nicht fehlerhaft waren. Dieser Fehler trat auf, als der Computer das Trennzeichen "" als "Escape-Zeichen" bei der Angabe des Pfads missverstand. Also habe ich das Rohzeichen verwendet, um dieses Escape-Zeichen abzubrechen. Das ist richtig, das "r" vor dem Weg. Es ist kein Tippfehler.

Hoppla, Sie haben etwas in die for-Anweisung darunter geschrieben. Es bedeutet, eine Liste des angegebenen Zellbereichs zu lesen, vertikal zu verarbeiten und in eine leere Liste mit dem Namen values einzufügen.

Mit einem Bild erklären image.png

Ich möchte zuerst diesen Bereich durchsuchen, daher habe ich die Zelle angegeben, die hier gelesen werden soll. In diesem Fall habe ich von Nr. 2 von A bis Zelle 53 von I angegeben (da der obere Titel nicht erforderlich ist). Wie auf der oben genannten Referenzseite erwähnt, ist diese Spezifikation in Ordnung, solange kein Datenverlust auftritt. Wenn jedoch die Daten fehlen, ist ein anderer Prozess erforderlich. Aber das ist eine andere Gelegenheit.

Also diesmal image.png Wir haben sie gebeten, vertikal als Gruppe horizontal zu lesen. Und schließlich werden die Wertedaten, die die Daten jeder Person als Liste enthalten, in eine leere Variable namens "character_list" eingefügt. ~~ FOO ^ ~! Es fühlt sich gut an! ~~

Erstellen Sie den Suchteil

Lassen Sie uns den Suchteil machen, auf den alle gewartet haben.

#Endlosschleifenausführung
while True:

    settargets = input("Welche der "Attribute", "Namen", "Größe", "3 Größen", "Geburtstag", "Alter", "Hobby", "Blutgruppe" und "Gewicht" sollten gesucht werden?:")

#Die Suche beginnt basierend auf dem in festgelegten Zielen eingegebenen Wert
    if settargets == "Attribut":
        attribute = input("Fairy,Princess,Geben Sie das Attribut mit einem der Engel ein:")

#Extrahieren Sie die Zeilen, die den Bedingungen und Attributen entsprechen_Liste einfügen
        attribute_list = [d for d in character_list if d[1] == attribute]

#Ergebnisanzeige
        pprint(attribute_list)
#Bestätigen Sie, ob Sie die Suche fortsetzen möchten
        cont = input("Möchten Sie die Suche fortsetzen?(Y/N):")
        if cont == "Y" or cont == "y":
            continue
            
        elif cont == "N" or cont == "n":
            break

        else:
            continue

#Führen Sie den folgenden Vorgang aus
    if settargets == "Name":
        name = input("Bitte geben Sie Ihren Namen ein:")
    
        name_list = [d for d in character_list if d[0] == name]

        pprint(name_list)

        cont = input("Möchten Sie die Suche fortsetzen?(Y/N):")
        if cont == "Y" or cont =="y":
            continue
            
        elif cont == "N" or cont == "n":
            break

        else:
            continue

    if settargets == "Höhe":
        hight = input("Bitte geben Sie Ihre Größe ein:")
    
        hight_list = [d for d in character_list if d[6] == hight]

        pprint(hight_list)

        cont = input("Möchten Sie die Suche fortsetzen?(Y/N):")
        if cont =="Y" or cont == "y":
            continue
            
        elif cont == "N" or cont == "n":
            break

        else:
            continue

    if settargets == "3 Größen":
        threesize = input("3 Bitte geben Sie die Größe ein:")
    
        threesize_list = [d for d in character_list if d[5] == threesize]

        pprint(threesize_list)

        cont = input("Möchten Sie die Suche fortsetzen?(Y/N):")
        if cont == "Y" or cont == "y":
            continue
            
        elif cont == "N" or cont == "n":
            break

        else:
            continue

    if settargets =="Geburtstag":
        birthday = input("Bitte geben Sie Ihr Geburtsdatum ein:")
    
        birthday_list = [d for d in character_list if d[4] == birthday]

        pprint(birthday_list)

        cont = input("Möchten Sie die Suche fortsetzen?(Y/N):")
        if cont == "Y" or cont == "y":
            continue
            
        elif cont == "N" or cont == "n":
            break

        else:
            continue

    if settargets == "Alter":
        age = input("Bitte geben sie ihr alter ein:")
    
        age_list = [d for d in character_list if d[2] == age]

        pprint(age_list)

        cont = input("Möchten Sie die Suche fortsetzen?(Y/N):")
        if cont == "Y" or cont == "y":
            continue
            
        elif cont == "N" or cont =="n":
            break

        else:
            continue

    
    if settargets == "Hobby":
        hobby = input("Bitte geben Sie Ihr Hobby ein:")

        hobby_list = [d for d in character_list if d[7] == hobby]

        pprint(hobby_list)

        cont = input("Möchten Sie die Suche fortsetzen?(Y/N):")
        if cont == "Y" or cont == "y":
            continue
            
        elif cont == "N" or cont == "n":
            break

        else:
            continue



    if settargets == "Blutgruppe":
        bloodtype = input("Bitte geben Sie Ihren Namen ein:")
    
        bloodtype_list = [d for d in character_list if d[8] == bloodtype]

        pprint(bloodtype_list)

        cont = input("Möchten Sie die Suche fortsetzen?(Y/N):")
        if cont == "Y" or cont =="y":
            continue
            
        elif cont == "N" or cont == "n":
            break

        else:
            continue


    if settargets == "Körpergewicht":
        weight = input("Bitte geben Sie Ihr Gewicht ein:")
    
        weight_list = [d for d in character_list if d[3] == weight]

        pprint(weight_list)

        cont = input("Möchten Sie die Suche fortsetzen?(Y/N):")
        if cont == "Y" or cont == "y":
            continue
            
        elif cont == "N" or cont =="n":
            break

        else:
            continue

    
    else:
        print('Bitte ändern Sie das Schlüsselwort und versuchen Sie es erneut.(Beispiel:Geburtstag 29. Dezember →"12/29")')
        break

Es ist lange her, aber sobald Sie es geschrieben haben, müssen Sie nur so viel kopieren und einfügen, wie Sie benötigen, damit es einfach ist. Dieses Mal wollte ich so oft suchen können, wie ich wollte, also entschied ich mich für eine Endlosschleife.

Wenn Sie zu Beginn Ziele festlegen, wird der Benutzer zunächst gefragt, nach welchen Daten Sie suchen möchten. Anschließend wird die Suche basierend auf den Suchbedingungen durchgeführt, die von den festgelegten Zielen angegeben werden. Wenn Sie beispielsweise im ersten Block nach "Attribut" suchen möchten, fragen Sie "Welches Attribut-Idol möchten Sie sehen" und geben Sie das Ergebnis in das Attribut ein. Danach wird angewiesen, "attribute_list, das dasselbe Attribut (vom Benutzer eingegebenes Attribut) wie das an erster Stelle der Daten hat, in die Liste aufzunehmen. Die erste der Daten ist image.png

Es ist hier. Wenn Sie es normal zählen, ist es das zweite. Bitten Sie daher alle Daten, zu sehen, ob "die zweite (erste) der Daten mit dem angegebenen Zeichen übereinstimmt?". Übrigens heißt die Art und Weise, wie die for-Anweisung in dieser Liste enthalten ist, "List Inclusion Notation", aber ich dachte, dass sie geschrieben werden könnte, selbst wenn sie normal getrennt wäre, aber ich habe einen Fehler erhalten und bin fortgefahren. Ich hatte es nicht, also musste ich es mit der Listeneinschlussnotation machen. Ich erinnere mich, dass der Fehler, der zu diesem Zeitpunkt auftrat, so etwas wie "Int-Typ-Daten können nicht dekoriert werden!" War. Ich habe verschiedene Dinge ausprobiert, aber aus irgendeinem Grund habe ich diesen Fehler erhalten und konnte ihn nicht lösen.

Die resultierenden "Daten, die die Bedingungen erfüllen" werden angezeigt. Danach fragte ich: "Möchten Sie danach weiter suchen?" Es ist so einfach wie Y einzugeben, um fortzufahren, N einzugeben, um zu unterbrechen, und selbst wenn ein anderes Zeichen eingegeben wird, aber es war sehr praktisch.

Ergebnis

Es ist scharf, wenn Sie es machen, aber wenn Sie anfangen, es zu benutzen, können Sie Zeit sparen und E fühlen! Ich möchte eine Site, die Profilsuche auch offiziell durchführen kann ... aber es kann sein, dass () Nun, ich bin schon müde, also hier. Baicha.

Recommended Posts

Versuchen Sie, in Python nach einem Profil mit einer Million Zeichen zu suchen
Versuchen Sie, ein SYN-Paket in Python zu senden
Versuchen Sie, eine einfache Animation in Python zu zeichnen
Holen Sie sich ein Zeichen für Conoha mit Python
Probieren Sie eine funktionale Programmierpipe in Python aus
Berechnen wir das statistische Problem mit Python
Versuchen Sie, RPN mit Python zu berechnen (für Anfänger)
Versuchen Sie gRPC in Python
Probieren Sie 9 Slices in Python aus
Auf der Suche nach einer effizienten Möglichkeit, eine Docker-Datei mit Python mit Gedichten zu schreiben
Versuchen Sie, ein Python-Modul in C-Sprache zu erstellen
[Python] So erweitern Sie Variablen in einer Zeichenfolge
Versuchen Sie, Python mit pybind11 in ein C ++ - Programm einzubetten
Proxy für Python-Pip festlegen (beschrieben in pip.ini)
Machen Sie einen Screenshot in Python
Erstellen Sie eine Funktion in Python
Erstellen Sie ein Wörterbuch in Python
Techniken zum Sortieren in Python
Versuchen Sie LINE Notify mit Python
Erstellen Sie ein Lesezeichen in Python
Lassen Sie uns Yuma in Python 3 implementieren
Zeichne ein Herz in Python
In Python gelernter Zeichencode
Über "für _ in range ():" von Python
Versuchen Sie, Python in der mit pipenv erstellten Django-Umgebung auszuführen
Versuchen Sie, das DeepZoom-Dateiformat .DZI in Python zu erstellen
Veröffentlichung einer Bibliothek, die Zeichendaten in Python-Bildern verbirgt
Erstellen Sie ein untergeordnetes Konto für die Verbindung mit Stripe in Python
Probieren Sie die ähnliche Suche von Image Search mit Python SDK [Search] aus.
Erstellen einer Entwicklungsumgebung für Android-Apps - Erstellen von Android-Apps mit Python
Eine einfache Möglichkeit, mehrere for-Schleifen in Python zu vermeiden
So definieren Sie mehrere Variablen in einer Python for-Anweisung
Versuchen Sie, ein neuronales Netzwerk in Python aufzubauen, ohne eine Bibliothek zu verwenden
Versuchen Sie, eine in Python geschriebene Funktion mit Fn Project auszuführen
Versuchen Sie einfach, einen Webhook mit ngrok und Python zu erhalten
Wettbewerb mit VS-Code Erstellen Sie eine Python-Umgebung für Profis unter Windows
Überprüfen Sie Python auf Speicherlecks
Wahrscheinlich in einer Nishiki-Schlange (Originaltitel: Vielleicht in Python)
Schreiben Sie eine Dichotomie in Python
Azure-Funktionen: Probieren Sie dauerhafte Funktionen für Python aus
[Python] Verwalten Sie Funktionen in einer Liste
Suchen Sie mit Python nach externen Befehlen
Drücken Sie einen Befehl in Python (Windows)
Eine kurze Zusammenfassung von Graphviz in Python (nur für Mac erklärt)
Versuchen Sie, die Thread-Liste der Nachrichten (Abneigung) mit Python zu erhalten.
Wie wäre es mit Anaconda zum Erstellen einer maschinellen Lernumgebung mit Python?
Erstellen Sie einen DI-Container mit Python
[Einführung in Python] So geben Sie eine Zeichenfolge in einer Print-Anweisung aus
ABC166 in Python A ~ C Problem
Versuchen Sie es mit virtualenv, mit dem eine virtuelle Umgebung von Python erstellt werden kann
Schreiben Sie A * (A-Stern) -Algorithmen in Python
Löschen Sie ein bestimmtes Zeichen in Python, wenn es das letzte ist
Versuchen Sie, mit Python3 eine Zeichenfolge aus einem Bild zu extrahieren
Versuchen Sie es mit LevelDB mit Python (plyvel)
Versuchen wir es mit Fizz Buzz mit Python
Erstellen Sie eine Binärdatei in Python
Versuchen Sie, Trace in Python zu berechnen