[英]How to grab on value from an s3 log using python?
我已經使用 Python 創建了到 AWS s3 的連接。 我已經使用過濾器來獲取我需要的日志類型,但現在我無法獲取特定值。 我試過創建一個字典,但解析不好,所以不太確定我是否應該轉換為字符串,然后以這種方式解析值,或者什么是最好的選擇。
我已經創建了與登錄詳細信息的連接。
s3_client = boto3.client('s3')
s3_bucket_name = 'halo-test-log-bucket'
s3 = boto3.resource('s3',
aws_access_key_id='XXXXXXXXXXXXXX',
aws_secret_access_key='XXXXXXXXXXXXXXXXXXXXXXXXXXXXX')
這是我得到罰款的地方:
my_bucket = s3.Bucket(s3_bucket_name)
for file in my_bucket.objects.filter(Prefix = ARCID+'-quote'):
file_name=file.key
print(file_name)
我試圖獲得價值:
for file in bucket_list:
obj = s3.Object(s3_bucket_name, file)
data=obj.get()['Body'].read()
data=str(data, 'utf-8')
data=StringIO(data)
ARCID_df=pd.read_csv(data, on_bad_lines='skip')
ARCID_df.iloc[[125]]
這不起作用。 就像我之前說的,正在考慮將這個日志變成一個字符串,然后獲取特定的值,但希望得到一個 dataframe 或至少一個字典。
以下是日志 output 的示例:
2022-08-26 18:50:01.002 INFO 1 --- [http-nio-8092-exec-8] c.afficiency.quote.service.QuoteService : productId:1111
2022-08-26 18:50:01.002 INFO 1 --- [http-nio-8092-exec-8] c.afficiency.quote.service.QuoteService : arcId:ARC667766666
2022-08-26 18:50:01.002 INFO 1 --- [http-nio-8092-exec-8] c.afficiency.quote.service.QuoteService : ##### calling getConfig #######
2022-08-26 18:50:01.002 INFO 1 --- [http-nio-8092-exec-8] c.afficiency.quote.service.QuoteService : getConfig Req Obj:{"arcId":"ARC6667766666","productId":"1111"}
2022-08-26 18:50:01.031 INFO 1 --- [http-nio-8092-exec-8] c.afficiency.quote.service.QuoteService : getConfig ResponseObj:{
"redisHost": "happy.com",
"redisPassword": "1111111111111111",
"redisPort": "11111",
"redisUser": "default",
"statusCode": "200"
}
2022-08-26 18:50:01.031 INFO 1 --- [http-nio-8092-exec-8] c.afficiency.quote.service.QuoteService : REDIS getConfig Response ConfigStatus:200
2022-08-26 18:50:01.031 INFO 1 --- [http-nio-8092-exec-8] c.afficiency.quote.service.QuoteService : Input Age:00
2022-08-26 18:50:01.031 INFO 1 --- [http-nio-8092-exec-8] c.afficiency.quote.service.QuoteService : Input Gender:1
2022-08-26 18:50:01.031 INFO 1 --- [http-nio-8092-exec-8] c.afficiency.quote.service.QuoteService : Input State:MD
2022-08-26 18:50:01.031 INFO 1 --- [http-nio-8092-exec-8] c.afficiency.quote.service.QuoteService : ### Input term:15
2022-08-26 18:50:01.034 INFO 1 --- [http-nio-8092-exec-8] c.afficiency.quote.service.QuoteService : fetched value from Redis arcid+DIST:7777
2022-08-26 18:50:01.035 INFO 1 --- [http-nio-8092-exec-8] c.afficiency.quote.service.QuoteService : ##distId:7777
2022-08-26 18:50:01.035 INFO 1 --- [http-nio-8092-exec-8] c.afficiency.quote.service.QuoteService : ####### Input Validation and Data Preparation########
2022-08-26 18:50:01.035 INFO 1 --- [http-nio-8092-exec-8] c.afficiency.quote.service.QuoteService : ### Inside GetServiceApi Call
2022-08-26 18:50:01.035 INFO 1 --- [http-nio-8092-exec-8] c.afficiency.quote.service.QuoteService : [getService]getServiceUrl:http://getservice-utility-container-external.haven-life-utilities:8092/getServices
2022-08-26 18:50:01.035 INFO 1 --- [http-nio-8092-exec-8] c.afficiency.quote.service.QuoteService : GetServiceApi Req Obj:{"inProductCode":"1111"}
Output:
2022-08-29 21:05:43.130 INFO 1 --- [http-nio-8092-exec-2] c.afficiency.quote.service.QuoteService : productId:9339
69 2022-08-29 21:05:43.235 INFO 1 --- [http-nio-...
大家好,我對我最后一段代碼中的不確定性感到抱歉。 我確實想通了。 我所做的是將 output 變成一個字符串,然后在我正在尋找的值之前和之后拆分信息。
我首先遍歷日志以找到我正在尋找的特定日志,然后將其附加到列表中。 然后我訪問列表中的第一個文件,將其轉換為 object,然后讀取使用.get()
讀取文本正文,然后將字節讀取為字符串。
一旦我將它作為一個字符串,我將它拆分為值之前和之后的位置。
bucket_list = []
my_bucket = s3.Bucket(s3_bucket_name)
for file in my_bucket.objects.filter(Prefix = ARCID+'-quote'):
file_name=file.key
bucket_list.append(file_name)
for file in bucket_list:
obj = s3.Object(s3_bucket_name, file)
data_obj=obj.get()['Body'].read()
data_str=data_obj.decode('utf-8')
rate_mult_key = data_str.split("Ans Option List:[")
rate_mult_value = rate_mult_key[2].split(']')
rate_multiplier = float(rate_mult_value[0])
Output:
1.95
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.