python - 在 Lambda 中读取 AWS S3 CSV 列名称
问题描述
我正在尝试编写一个脚本,该脚本从 AWS Aurora Serverless MySQL 数据库表中收集架构,从存储在 AWS S3 存储桶中的 CSV 文件中收集列标题,并且仅在其列标题是子集时才将 CSV 写入表模式(例如,如果表字段是 ['Name', 'DOB', 'Height'] 但 CSV 字段是 ['Name', 'DOB', 'Weight'] 脚本将抛出异常。
到目前为止,我已经成功地在 AWS Lambda 函数中返回了表架构,并成功读取了 CSV 文件,但我不确定如何从 S3 对象中获取列标题。
def return_db_schema(event):
schema = []
conn = pymysql.connect(rds_host, user=name, passwd=password, db=db_name, connect_timeout=5)
with conn.cursor() as cur:
cur.execute('SHOW columns FROM SampleTable')
conn.commit()
cur.close()
for row in cur:
schema.append(list(row)[0])
return schema
def return_csv_cols(event):
s3 = boto3.client('s3')
tester = s3.get_object(Bucket=s3_bucket, Key=test_key)
contents = tester['Body'].read()
def main(event, context):
print(return_db_schema(event))
print()
print(return_csv_cols(event))
我不确定如何从这里开始(例如,有没有办法在不将 CSV 加载到 pandas DataFrame 并调用df.columns()
或类似的东西的情况下做到这一点?)。
解决方案
我已经用以下代码解决了这个问题:
s3 = boto3.client('s3')
tester = s3.get_object(Bucket=s3_bucket, Key=test_key)
contents = tester['Body'].read().decode('UTF-8')
cols = contents.split('\n')[0].split(',')
return cols, contents
推荐阅读
- python - 在 Python 中绘制具有 2D 向量条目的函数
- javascript - 如何重新启动倒数计时器以及为什么它会跳过几秒钟
- powerbi - 使用多个标准选择计数
- javascript - 无法对未安装的组件 REACT-NATIVE 执行 React 状态更新
- python - PyCharm。意外的参数 可能的被调用者
- php - PHP 查询显示空白页
- cluster-analysis - 整群抽样中的问题:“与负下标混合”
- html - 如何将文本居中放置在图像上方
- python - 问题是找到 1 到 num 内的两个数字相乘成为 num
- bootstrap-4 - 用于消息传递和偶尔文件共享的聊天应用程序