J'écris un script qui analyse les paramètres de requête d'un fichier journal apache dans une table pandas.Comment joindre plusieurs lignes (multi-index?) Dans pandas dans une rangée OU Comment extraire les paramètres d'une demande d'un journal Apache (chaîne)?
Une demande d'exemple est comme ceci:
GET /v1/board?id=8504178&limit=1&to=8504177 HTTP/1.1
GET /v1/connections?from=850417&to=8504177 HTTP/1.1
GET /v1/location?query=850417
Il y a beaucoup de paramètres et pas d'ordre fixe. Donc, je pense que la méthode pandas extract() ne fonctionnera pas. C'est pourquoi j'essaye de le faire avec extractall(). Ma première version d'une expression regex et l'extraction avec elle est comme ceci:
req_patt = ("(?P<request>GET) \/v1\/(?P<resource>connections|stationboard|locations)|"
"from=(?P<from>.*?)&|"
"to=(?P<to>\d*|\w*)(?P<to_del>&|\s)"
)
df_temp = df['fullrequest'].str.extractall(req_patt)
Alors que je reçois ce dataframe retour:
actual output:
index requests resources from to
(0, 0) GET connections nan nan
(0, 1) nan nan 8504178 nan
(0, 2) nan nan nan 8504177
(1, 0) GET stationboard nan nan
(1, 1) nan nan nan 8504177
Mais à la fin je voudrais avoir quelque chose comme ceci:
expected output:
index requests resources from to
0 GET connections 8504178 8504177
1 GET stationboard nan 8504177
donc ma question à la fin: Comment puis-je faire partie de ces simples lignes à une ligne?
'(P GET (= \ s)?) | \/v1 \/(? P [^? \ s] *) | de = (? P [^ & \ s] *) | to = (? P [^ & \ s] *) '? –
ctwheels