我要求我的lambda函数创建一个新的CSV文件,并在写入后上传它。
with open('mycsv.csv', 'w', newline ='') as f:
thewriter = csv.writer(f)
thewriter.writerow(['col1','col2','col3'])
s3_client = boto3.client('s3')
response = s3_client.upload_file('/tmp/' + mycsv.csv, 'my-bucket', 'myfoleder/'+mycsv.csv)
请注意,文件'mycsv.csv'并不存在,我希望能够在运行时创建它作为lambda函数的一部分。这是可能的吗?当lambda被触发时,我得到以下错误
[Errno 30] Read-only file system: 'mycsv.csv'
2条答案
按热度按时间8ehkhllq1#
在lambda上,除了
/tmp
目录之外,文件系统大部分是只读的。当你打开文件进行写入时,它需要转到/tmp/mycsv.csv
:你也可以考虑使用Python的tempfile.NamedTemporaryFile,它会自动写入
/tmp
,并在你退出上下文管理器块时删除该文件。ttvkxqim2#
您可以跳过中间文件,完全在内存中处理数据。这样做的好处是速度更快,并且允许您处理更大的数据。目前,Lambda offers在
/tmp
中只有512 MB的磁盘空间,但内存高达3 GB。也可以考虑压缩您的CSV文件。这将导致更快和更便宜的传输到/从S3。