📜  如何从 S3 读取 csv 文件 (1)

📅  最后修改于: 2023-12-03 15:08:14.589000             🧑  作者: Mango

如何从 S3 读取 CSV 文件

当你需要从 S3 中读取一个 CSV 文件时,可以使用 Amazon Web Services (AWS) 的 boto3 Python 库来完成。boto3 是 AWS 提供的一个用于访问 AWS 服务的 Python 库,它可以方便地在 Python 代码中使用 AWS 的各种服务。在本文中,我们将介绍如何使用 boto3 读取 S3 中的 CSV 文件。

确定安装 boto3

首先,你需要安装 boto3 库。你可以使用 pip 来安装它:

pip install boto3
连接 S3

在读取 S3 中的文件之前,你需要使用 boto3 来连接到 S3:

import boto3

s3 = boto3.resource('s3')

bucket_name = 'my-bucket'
bucket = s3.Bucket(bucket_name)

这里我们使用 boto3.resource 函数创建一个 S3 资源对象,并指定 S3 存储桶的名称。如果你还没有创建 S3 存储桶,可以使用 AWS 的 web 控制台或者 AWS CLI 来创建。

读取 CSV 文件

一旦连接到 S3 资源,我们就可以使用 Bucket.Object 方法来获取 S3 上的对象,并使用 read() 方法读取文件的内容。为了使用 read() 方法读取 CSV 文件,你需要将文件内容解码成字符串,并使用 StringIO 将其转换成 Python 中的 CSV 对象:

import csv
from io import StringIO

key = 'path/to/file.csv'
obj = bucket.Object(key)
response = obj.get()
content = response['Body'].read().decode('utf-8')
csv_reader = csv.reader(StringIO(content))

这里我们使用了 bucket.Object 方法将 S3 中的 key 路径指定到特定的文件,并使用 get() 方法获取文件的内容。然后我们使用 read() 方法读取文件的内容,并使用 decode() 方法将二进制字符串解码成 Unicode 字符串。接下来,我们使用 StringIO 将字符串转换为类似文件对象的 CSV 对象,并使用 csv.reader 函数将其转换为 Python 中的列表。

读取 CSV 数据

一旦将 CSV 文件读入 Python 中,我们就可以通过迭代它来逐行读取数据:

for row in csv_reader:
    print(row)

这将打印 CSV 文件的所有行。

完整代码

下面是读取 S3 中 CSV 文件的完整代码:

import boto3
import csv
from io import StringIO

# 连接 S3
s3 = boto3.resource('s3')
bucket_name = 'my-bucket'
bucket = s3.Bucket(bucket_name)

# 读取 CSV 文件
key = 'path/to/file.csv'
obj = bucket.Object(key)
response = obj.get()
content = response['Body'].read().decode('utf-8')
csv_reader = csv.reader(StringIO(content))

# 读取 CSV 数据
for row in csv_reader:
    print(row)
结论

在本文中,我们介绍了如何使用 boto3 从 S3 中读取 CSV 文件。请牢记,在使用 boto3 时,你需要对 AWS 访问凭证进行配置。你可以在 AWS IAM 控制台创建凭证,并将其传递给 boto3 的函数或者使用 ~/.aws/credentials 文件来保存凭证。