如何在不获取csv-fi数据的情况下只从s3 bucket读取5条记录并返回

2024-06-15 22:42:54 发布

您现在位置:Python中文网/ 问答频道 /正文

大家好,我知道很多类似的问题,我会在这里找到,但我有一个代码是正确执行,这是返回五个记录,我的问题是,我应该如何只读取整个文件和至少返回愿望行只是我有一个csv文件的大小在gb,所以我不想返回整个gb文件的数据只获取5个记录,所以请告诉我应该如何得到它…如果可能的话,请解释我的代码如果不好为什么它不好。。 代码:

import boto3
from botocore.client import Config
import pandas as pd

ACCESS_KEY_ID = 'something'
ACCESS_SECRET_KEY = 'something'
BUCKET_NAME = 'something'
Filename='dataRepository/source/MergedSeedData(Parts_skills_Durations).csv'

client = boto3.client("s3",
                     aws_access_key_id=ACCESS_KEY_ID,
                     aws_secret_access_key=ACCESS_SECRET_KEY)
obj = client.get_object(Bucket=BUCKET_NAME, Key=Filename)
Data = pd.read_csv(obj['Body'])
# data1 = Data.columns
# return data1
Data=Data.head(5)
print(Data)

这是我的代码,运行良好,也得到了5个记录从s3桶,但我已经解释了,我正在寻找任何其他查询请随时给我发短信…thnxx提前


Tags: 文件csvkey代码importclientiddata
2条回答

您可以使用HTTPRange:头(see RFC 2616),它接受字节范围参数。s3api对此有一个规定,这将帮助您不必读取/下载整个S3文件。在

样本代码:

import boto3
obj = boto3.resource('s3').Object('bucket101', 'my.csv')
record_stream = obj.get(Range='bytes=0-1000')['Body']
print(record_stream.read())

这将只返回头中提供的byte_range_数据。在

但是您需要修改它来将字符串转换为Dataframe。对于来自.csv文件的字符串中的\t和{},可能是{}

您可以使用reading a file in chunks的pandas功能,只需加载所需的数据即可。在

Data_iter = pd.read_csv(obj['Body'], chunksize = 5)
Data = Data_iter.get_chunk()
print(Data)

相关问题 更多 >