Bonjour à tous,
Je suis en train de me former à la programmation python dans le cadre d'une reconversion professionnelle vers la data analyse.
Je fais quelques exercices sur les regex mais je bloque sur un point.
Dans cet exercice j'ai un fichier de logs dont je dois ressortir différentes données (noms d'utilisateurs, IP, type de requete et date) sous cette forme :
1 2 3 4
| example_dict = {"host":"146.204.224.152",
"user_name":"feest6811",
"time":"21/Jun/2019:15:45:24 -0700",
"request":"POST /incentivize HTTP/1.1"} |
Le but étant de pouvoir afficher un dictionnaire par utilisateur.
Je ne sais pas si ma méthode est la bonne, mais j'ai commencé par créer 4 listes contenant chacunes les éléments que je cherchais en écrivant ça :
1 2 3 4 5 6 7 8
| import re
def logs():
with open("logdata.txt", "r") as file:
logdata = file.read()
host=re.findall("([\d]*[\.][\d]*[\.][\d]*[\.][\d]*)",logdata) #me permet d'obtenir chaques IP
user=re.findall("((?<=[\-][\s])[\w]*)",logdata) #me permet d'obtenir chaque nom d'utilisateurs
time=re.findall("([\d][\d][\/][\w]*[\/][\d]*:[\d]*:[\d]*:[\d]*[\s][\-][\d]*)",logdata) #me permet d'obtenir chaques dates
post=re.findall("((?<=[\"]).*(?=[\"]))",logdata) #me permet d'obtenir chaque requetes |
J'obtiens bien le bon résultat en demandant ensuite d'afficher un dictionnaire précis, par exemple :
dico={"host":host[1],"user_name":user[1],"time":time[1],"request":post[1]}
Par contre j'aurais voulu que la fonction me permette de retourner n'importe quel dictionnaire en réponse et je ne sais pas comment faire, est ce qu'il faut que je rajoute des paramètres?
Merci à ceux qui prendront le temps de m'aider
Ps : je sais que la fonction n'est actuellement pas complète et que ça ne peut pas fonctionner uniquement avec ce que j'ai mis, j'essaye justement de savoir ce que je dois mettre en return à la fin pour pouvoir obtenir ce que je cherche
Partager