我正在LinuxAcademy网站上做一个实验室。com课程名称是使用Lambda、Python和Boto3自动化自动气象站,我遇到问题的具体实验室是讲座:将CSV文件导入DynamoDB。
在这个实验室中,我们将一个. csv文件上传到S3,在该特定桶中生成一个S3事件,然后启动如下所示的Lambda脚本:
import csv
import os
import tempfile
import boto3
dynamodb = boto3.resource('dynamodb')
table = dynamodb.Table('Movies')
s3 = boto3.client('s3')
def lambda_handler(event, context):
for record in event['Records']:
source_bucket = record['s3']['bucket']['name']
key = record['s3']['object']['key']
with tempfile.TemporaryDirectory() as tmpdir:
download_path = os.path.join(tmpdir, key)
s3.download_file(source_bucket, key, download_path)
items = read_csv(download_file)
with table.batch_writer() as batch:
for item in items:
batch.put_item(Item=item)
def read_csv(file):
items=[]
with open(file) as csvfile:
reader = csv.DictReader(csvfile)
for row in reader:
data = {}
data['Meta'] = {}
data['Year'] = int(row['Year'])
data['Title'] = row['Title'] or none
data['Meta']['Length'] = int(row['Length'] or 0)
#data['Meta']['Length'] = int(row['Length'] or 0)
data['Meta']['Subject'] = row['Subject'] or None
data['Meta']['Actor'] = row['Actor'] or None
data['Meta']['Actress'] = row['Actress'] or None
data['Meta']['Director'] = row['Director'] or None
data['Meta']['Popularity'] = row['Popularity'] or None
data['Meta']['Awards'] = row['Awards'] == 'Yes'
data['Meta']['Image'] = row['Image'] or None
data['Meta'] = {k: v for k,
v in data['Meta'].items() if v is not None}
上传到s3的.csv文件确实调用了lambda函数。第20行出现错误:items=read\u csv(download\u file)
AWS CloudWatch出错:
[ERROR] NameError: name 'download_file' is not defined
Traceback (most recent call last):
File "/var/task/lambda_function.py", line 20, in lambda_handler
items = read_csv(download_file)
s3.download_file(source_bucket, key, download_path)
items = read_csv(download_file)
第一行调用Amazon S3客户端上的下载文件()方法,将文件下载到本地磁盘。
第二行调用read\u csv()函数,传递一个名为download\u file的变量。但是,尚未定义名为下载文件的变量,这就是您收到错误的原因。
在查看代码时,read_csv()
函数期望打开文件名。这似乎在download_path
变量中可用,其中包含本地目录和密钥。因此,将其更改为:
items = read_csv(download_path)
下面是我的一些代码: 谢谢你的协助。
问题内容: 我想创建一个csv文件,但是当我运行代码时,它返回一个空白页,没有csv文件。我使用PHP5。我使用以下代码: 谢谢! 问题答案: 其空白,因为您正在写信。您应该写到using 代替,还应该发送标头信息以表明它是csv。 例
问题内容: 如何自动创建pyi文件的样板代码? 我想创建一个保华集团的类型描述暗示文件pep484其中包含了所有的方法名。 我不要魔术。我要在自动创建文件后添加类型信息。 我想避免复制+粘贴工作。 目标:在PyCharm for Python2中键入提示。 问题答案: 就我而言,PyCharm中没有此类直接工具。但是,有用于此目的的第三方工具。 MyPy 是的,我想任何想在Python中使用编译时
请有人给我指个正确的方向。
我想创造一个新的世界。cmd文件,用于过滤所有。csv文件,然后创建一组。包含结果的csv文件。 下面是一个场景。 有很多。文件夹中的csv文件csv文件中的第一列数据包含一个代码在哪里可以是任何一组数字,范围从 我希望批处理文件在01开始XX,在那里找到HH?????-01,它取行并将结果放入名为的输出文件中 开始时的代码可能不同,因此它还必须过滤 然后对文件夹中的每个csv文件重复此操作。 然
问题内容: 我刚刚了解到MySQL具有本地CSV存储引擎,该引擎将数据存储在每个表的逗号分隔值文件中。 是否可以直接从上传的CSV文件创建表格,例如: 用户在哪里上传? 问题答案: 这不可能。要创建表,您需要一个表架构。您拥有的是一个数据文件。无法使用它创建模式。 您可以做的是检查文件中是否有标题行,在这种情况下,您可以使用该标题行手动创建表。 但是,有一种使用批处理文件生成create tabl