[Python] Défiez 100 coups! (020-024)

À propos de l'histoire jusqu'à présent

Voir First Post

État de Knock

9/24 ajouté

Chapitre 3: Expressions régulières

Il existe un fichier jawiki-country.json.gz qui exporte les articles Wikipédia au format suivant. ・ Les informations d'un article par ligne sont stockées au format JSON -Dans chaque ligne, le nom de l'article est stocké dans la clé "titre" et le corps de l'article est stocké dans l'objet dictionnaire avec la clé "texte", et cet objet est écrit au format JSON. -Le fichier entier est compressé avec gzip Créez un programme qui effectue le traitement suivant.

020. Lecture des données JSON

Lisez le fichier JSON de l'article Wikipedia et affichez le texte de l'article sur "UK". Dans les problèmes 21-29, exécutez sur le texte de l'article extrait ici.

json_read_020.py


#-*- coding:utf-8 -*-

import json
import gzip
import re

def uk_find():
    basepath = '/Users/masassy/PycharmProjects/Pywork/training/'
    filename = 'jawiki-country.json.gz'
    pattern = r"Angleterre"
    with gzip.open(basepath + filename, 'rt')as gf:
        for line in gf:
            # json.charges est str → dict, json.load is file → dict
            json_data = json.loads(line)
            if (re.match(json_data['title'], pattern)):
                return json_data['text']

if __name__ == "__main__":
    json_data = uk_find()
    print(json_data)

result


{{redirect|UK}}
{{Informations de base Pays
|Nom abrégé=Angleterre

(Omis parce que c'est long)

[[Category:Pays insulaire|Kureito Furiten]]
[[Category:État / région créé en 1801]]

Process finished with exit code 0

Impressions: Il m'a fallu un certain temps pour comprendre le format de données du fichier lu par gzip.open et le format de données de json_data.

021. Extraire les lignes contenant les noms des catégories

Extrayez la ligne qui déclare le nom de la catégorie dans l'article.

category_021.py


from training.json_read_020 import uk_find
import re

if __name__=="__main__":
    pattern = re.compile(r'.*Category.*')
    lines = uk_find()
    for line in lines.split('\n'):
        if pattern.match(line):
            print(line)

result


[[Category:Angleterre|*]]
[[Category:Royaume du Royaume-Uni|*]]
[[Category:Pays membres du G8]]
[[Category:Pays membres de l'Union européenne]]
[[Category:Nation marine]]
[[Category:Pays souverain]]
[[Category:Pays insulaire|Kureito Furiten]]
[[Category:État / région créé en 1801]]

Process finished with exit code 0

Impressions: Il m'a fallu un certain temps pour réaliser que la combinaison de l'expression régulière. \ * Caractère de recherche. \ * Et lines.split ('\ n') peut renvoyer des lignes contenant le caractère de recherche.

022. Extraction du nom de la catégorie

Extrayez les noms des catégories d'articles (par nom et non par ligne).

category_str_022.py


from training.json_read_020 import uk_find
import re

if __name__=="__main__":
    pattern = re.compile(r'.*Category:.*')
    pattern2 = re.compile(r'.*\|.*')
    lines = uk_find()
    for line in lines.split('\n'):
        if pattern.match(line):
            strip_line=line.lstrip("[[Category:").rstrip("]]")
            if pattern2.match(strip_line):
                N = strip_line.find('|')
                strip_line2 = strip_line[:N]
                print(strip_line2)
            else:
                print(strip_line)

result


Angleterre
Royaume du Royaume-Uni
Pays membres du G8
Pays membres de l'Union européenne
Nation marine
Pays souverain
Pays insulaire
État / région créé en 1801

Process finished with exit code 0

Impression: après l'extraction de la catégorie, elle est dans la ligne|S'il y a|Le point d'ingéniosité est la partie qui spécifie l'endroit à découper à la position de.

023. Structure de la section

Affichez le nom de la section et son niveau contenus dans l'article (par exemple, 1 si "== nom de la section ==").

section_023.py


import re
from training.json_read_020 import uk_find

if __name__=="__main__":
    pattern = re.compile(r'^=.*')
    pattern2 = re.compile(r'^={2}')
    pattern3 = re.compile(r'^={3}')
    pattern4 = re.compile(r'^={4}')

    lines=uk_find()
    for line in lines.split('\n'):
        if pattern.match(line):
            if pattern4.match(line):
                print(line.lstrip('====').rstrip('====')+':Niveau 4')
            elif pattern3.match(line):
                print(line.lstrip('===').rstrip('===')+':Niveau 3')
            elif pattern2.match(line):
                print(line.lstrip('==').rstrip('==')+':Niveau 2')
            else:
                print('no match')

result


Nom du pays:Niveau 2
histoire:Niveau 2
La géographie:Niveau 2
climat:Niveau 3
(Omis parce que c'est long)

Process finished with exit code 0

Impressions: Après avoir créé quatre modèles de compilation, j'ai d'abord extrait les lignes commençant par = puis j'ai branché le processus en fonction du niveau, mais c'était assez forcé. Il semble y avoir un autre bon moyen.

024. Extraction des références de fichiers

Extrayez tous les fichiers multimédias référencés dans l'article.

media_024.py


from training.json_read_020 import uk_find
import re

if __name__=="__main__":
    pattern = re.compile(r".*(Fichier|File).*")
    pattern2 = re.compile(r"^|.*")
    lines = uk_find()
    for line in lines.split('\n'):
        if pattern2.search(line):
            line = line.lstrip('|')
        if pattern.search(line):
            start = line.find(':')+1
            end = line.find('|')
            print(line[start:end])

result


Royal Coat of Arms of the United Kingdom.svg
Battle of Waterloo 1815.PNG
The British Empire.png
Uk topo en.jpg
BenNevis2005.jpg
(Omis parce que c'est long)

Impressions: Tableau de balisage pour déterminer la position des tranches Le point d'ingéniosité est d'effectuer un traitement qui correspond au format de la partie fichier à partir de

Recommended Posts

[Python] Défiez 100 coups! (015 ~ 019)
[Python] Défiez 100 coups! (030-034)
[Python] Défiez 100 coups! (006-009)
[Python] Défiez 100 coups! (000-005)
[Python] Défiez 100 coups! (010-014)
[Python] Défiez 100 coups! (025-029)
[Python] Défiez 100 coups! (020-024)
journal des défis python ①
Défi Spartacamp Python 2019 Day2
Pandas 100 coups pour les débutants en Python
Défiez Python3 et Selenium Webdriver
Défiez LOTO 6 avec Python sans discipline
Traitement d'image avec la binarisation Python 100 knocks # 3
# 2 Les débutants en Python défient AtCoder! ABC085C --Otoshidama
100 traitement d'image par Python Knock # 2 Échelle de gris
python kafka
Les bases de Python ⑤
Résumé Python
Notation d'inclusion Python
Technique Python
Étudier Python
Mémorandum Python
Python FlowFishMaster
Service Python
astuces python
fonction python ①
Les bases de Python
Mémo Python
ufo-> python (3)
Notation d'inclusion Python
Installer python
Python Singleton
Les bases de Python ④
Mémorandum Python 2
mémo python
Python Jinja2
100 traitement d'image avec Python Knock # 8 Max Pooling
Incrément Python
atCoder 173 Python
[Python] fonction
Installation de Python
Installer Python 3.4.3.
Essayez Python
Mémo Python
Itératif Python
Algorithme Python
Python2 + mot2vec
[Python] Variables
Python sys.intern ()
Tutoriel Python
Fraction Python
underbar python C'est ce que
Résumé Python
Démarrer python
Remarque: Python
Les bases de Python ③
Sortie du journal python
Les bases de Python
[Scraping] Scraping Python