繁体   English   中英

使用 boto3 和 python 从 S3 存储桶目录中仅读取特定格式的文件

[英]Reading only specific format files from a S3 bucket dir using boto3 and python

在我的 s3 存储桶目录中,我有多个文件,例如 .csv、.log、.txt 等。但我需要使用 boto3 读取单个目录中的只读.log文件和 append 它们。 我尝试了下面的代码,但它正在读取所有文件数据,无法使用 *.log 进行限制,并且结果以单行形式出现,由 '\n' 分隔,如下所述。
我怎样才能只读取日志文件并合并它们,结果应该是一行一行的。

    import boto3
    import pandas as pd
    import csv
    
    s3 = boto3.resource('s3')
    my_bucket = s3.Bucket('my_bucket')
    
    lst = []
    for object in my_bucket.objects.filter(Prefix="bulk_data/all_files/"):
        print(object.key)
        bdy = object.get()['Body'].read().decode('utf-8')
        lst.append(bdy)
        bdy = ''
    print(lst)

lst output 像这样以 '\n' 作为分隔符。 '12345,6006,7290,7200,JKHBJ,S,55\n44345,6996,6290,7288,JKHkk,R,57\n.......'

我应该得到如下内容:

12345,6006,7290,7200,JKHBJ,S,55

44345,6996,6290,7288,JKHkk,R,57

...

filter只接受前缀,而不接受后缀 因此,您必须自己过滤它,例如使用:

import boto3
import pandas as pd
import csv

s3 = boto3.resource('s3')
my_bucket = s3.Bucket('my_bucket')

lst = []
for s3obj in my_bucket.objects.filter(Prefix="attachments/"):
    
    # skip s3 objects not ending with csv
    if (not s3obj.key.endswith('csv')): continue
        
    print(s3obj.key)
    bdy = s3obj.get()['Body'].read().decode('utf-8')
    lst.append(bdy)
    bdy = ''
    
#print(lst)

for file_str in lst:
    for line in file_str.split('\n'):
        print(line)

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM