Je tente de lire les fichiers de mon compartiment S3 et de les analyser avec un motif regex. Cependant, je n'ai pas été capable de comprendre lire les fichiers ligne par ligne. Existe-t-il un moyen de faire ceci ou d'une manière différente que j'ai besoin d'approcher ceci pour l'analyse syntaxique?Analyse des fichiers dans AWS S3 avec boto3
pattern = '^(19|20)\d\d[-.](0[1-9]|1[012])[-.](0[1-9]|[12][0-9]|3[01])[ \t]+([0-9]|0[0-9]|1[0-9]|2[0-3]):[0-5][0-9]:[0-5][0-9][ \t]+(?:[0-9]{1,3}\.){3}[0-9]{1,3}[ \t]+(?:GET|POST|PUT)[ \t]+([^\s]+)[ \t]+[1-5][0-9][0-9][ \t]+(\d+)[ \t]+(\d+)[ \t]+"(?:[^"\\]|\\.)*"[ \t]+"(?:[^"\\]|\\.)*"[ \t]+"(?:[^"\\]|\\.)*"'
s3 = session.resource('s3')
bucket_name = s3.Bucket(bucket)
data = [obj for obj in list(bucket_name.objects.filter(Prefix=prefix)) if obj.key != prefix]
for obj in data:
key = obj.key
body = obj.get()['Body'].read()
print(key)
print(body)
for line in body:
print(line)
Je suis en mesure de voir le fichier correct et capable de lire le corps entier du fichier (près d'un journal IIS). Cependant, quand j'essaie d'itérer les lignes, j'obtiens des nombres. Ainsi, la sortie de print(line)
est
35
101
119
147
etc.
Je ne sais pas où ces chiffres viennent. Sont-ils des mots, des personnages, quelque chose d'autre?
Mon but est d'appliquer mon motif une fois que je suis capable de lire le fichier ligne par ligne avec l'opérateur d'expression régulière.
EDIT: Voici une de mes lignes de log
2016-06-14 14:03:42 1.1.1.1 GET /origin/ScriptResource.axd?=5f9d5645 200 26222 0 "site.com/en-US/CategoryPage.aspx" "Mozilla/5.0 (Linux; Android 4.4.4; SM-G318HZ Build/KTU84P)" "ASP.NET_SessionId=emfyTVRJNqgijw=; __SessionCookie=bQMfQzEtcnfMSQ==; __CSARedirectTags=ABOcOxWK/O5Rw==; dtCookie=B52435A514751459148783108ADF35D5|VVMrZVN1aXRlK1BXU3wx"
Veuillez vérifier ma réponse ci-dessous. –