1 votes

Obtenir tous les éléments d'une boucle au lieu de seulement le dernier

import re
def logs():
    with open("/content/contain.txt", "r") as file:
        logdata = file.read()

    for items in re.finditer(r"(?P<host>(\d{1,3}\.\d{1,3}\.\d{1,3}\.\d{1,3})) - (?P<username>(.*?)) \[(?P<time>(.*?))\] \"(?P<request>(.*?))\"",logdata):
        new_dict = (items.groupdict())
    return (new_dict) 
print(logs())    

de la production :

{'host': '30.95.91.251', 'username': 'larson8319', 'time': '21/Jun/2019:16:02:02 -0700', 'request': 'PUT /one-to-one/whiteboard HTTP/1.0'}

Ici, "contain.txt" contient beaucoup de données.

Je veux imprimer toute la liste des dictionnaires mais la fonction n'imprime qu'un seul dictionnaire.

Comment imprimer toute la liste des dictionnaires ?

1voto

Kota Mori Points 2745

Votre code continue à mettre à jour la valeur, de sorte que la valeur de retour ne serait que la dernière ligne. Vous devez accumuler la liste.

import re
def logs():
    with open("/content/contain.txt", "r") as file:
        logdata = file.read()
    new_dict = []

    for items in re.finditer(r"(?P<host>(\d{1,3}\.\d{1,3}\.\d{1,3}\.\d{1,3})) - (?P<username>(.*?)) \[(?P<time>(.*?))\] \"(?P<request>(.*?))\"",logdata):
        new_dict.append(items.groupdict())
    return (new_dict) 
print(logs())    

Si votre liste est trop volumineuse pour être conservée en mémoire, vous voudrez peut-être l'imprimer ligne par ligne, comme le fait @Jared, au lieu de l'ajouter à la liste. Un exemple est donné ci-dessous.

import re
def logs():
    with open("/content/contain.txt", "r") as file:
        logdata = file.read()

    for items in re.finditer(r"(?P<host>(\d{1,3}\.\d{1,3}\.\d{1,3}\.\d{1,3})) - (?P<username>(.*?)) \[(?P<time>(.*?))\] \"(?P<request>(.*?))\"",logdata):
        new_dict = items.groupdict()
        print(new_dict)

logs()

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X