gpt4 book ai didi

python - 使用 boto3 解析 AWS S3 中的文件

转载 作者:太空宇宙 更新时间:2023-11-03 10:57:20 31 4
gpt4 key购买 nike

我正在尝试从我的 S3 存储桶中读取文件,并使用正则表达式模式解析它们。但是,我无法弄清楚逐行读取文件。有没有一种方法可以做到这一点,或者我需要采用不同的方式来处理这个问题以进行解析?

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)

因此我能够看到正确的文件并能够读取文件的整个主体(接近 IIS 日志)。但是,当我尝试迭代这些行时,我得到了数字。所以print(line)的输出是

35
101
119
147
etc.

我不知道这些数字是从哪里来的。它们是单词、字符还是其他东西?

我的目标是在我能够使用正则表达式运算符逐行读取文件后应用我的模式。

编辑:这是我的日志行之一

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"

最佳答案

我在以下解决方案中使用的具有以下内容的文本文件:

I love AWS.
I love boto3.
I love boto2.

我认为问题出在线路上:

for line in body:

它逐个字符迭代,而不是逐行迭代。

C:\Users\Administrator\Desktop>python bt.py
I

l
o
v
e

A
W
S
.



I

l
o
v
e

b
o
t
o
3
.



I

l
o
v
e

b
o
t
o
2
.

C:\Users\Administrator\Desktop>

我们使用如下:

for line in body.splitlines():

然后输出看起来像这样

C:\Users\Administrator\Desktop>python bt.py
I love AWS.
I love boto3.
I love boto2.

C:\Users\Administrator\Desktop>

应用上面的东西,我在文本文件上尝试了下面的代码和小的正则表达式,它会从文件中给出 boto 版本。

import re
header = ['Date', 'time', 'IP', 'method', 'request', 'status code', 'bytes', 'time taken', 'referrer', 'user agent', 'cookie']
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)
x=0
for line in body:
m = re.search(r'(\d{4}-\d{2}-\d{2})\s+(\d{2}:\d{2}:\d{2})\s+([\d\.]+)\s+([GET|PUT|POST]+)\s+([\S]+)\s+(\d+)\s+(\d+)\s+(\d+)\s+([\S]+)\s+(\".*?\")\s+(.*)',line)
if m is not None:
for i in range(11):
print header[i]," - ",m.group(x)
x+=1
print "------------------------------------"
x=0

关于python - 使用 boto3 解析 AWS S3 中的文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39275043/

31 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com