Python将临时文件写入S3

Python将临时文件写入S3,python,amazon-s3,Python,Amazon S3,我目前正在尝试将数据帧写入临时文件,然后将该临时文件上载到S3存储桶中。当我运行代码时,当前没有发生任何操作。任何帮助都将不胜感激。以下是我的代码: import csv import pandas as pd import boto3 import tempfile import os s3 = boto3.client('s3', aws_access_key_id = access_key, aws_secret_access_key = secret_key, region_name

我目前正在尝试将数据帧写入临时文件,然后将该临时文件上载到S3存储桶中。当我运行代码时,当前没有发生任何操作。任何帮助都将不胜感激。以下是我的代码:

import csv
import pandas as pd
import boto3
import tempfile
import os 

s3 = boto3.client('s3', aws_access_key_id = access_key, aws_secret_access_key = secret_key, region_name = region)

temp = tempfile.TemporaryFile()
largedf.to_csv(temp, sep = '|')
s3.put_object(temp, Bucket = '[BUCKET NAME]', Key = 'test.txt')
temp.close()

传递给
s3.put\u对象的文件句柄
位于最终位置,当您
读取它时,它将返回一个空字符串

>>> df = pd.DataFrame(np.random.randint(10,50, (5,5)))
>>> temp = tempfile.TemporaryFile(mode='w+')
>>> df.to_csv(temp)
>>> temp.read()
''
快速修复方法是
。将
搜索回起始位置

>>> temp.seek(0)
0
>>> print(temp.read())
,0,1,2,3,4
0,11,42,40,45,11
1,36,18,45,24,25
2,28,20,12,33,44
3,45,39,14,16,20
4,40,16,22,30,37
注意,写入磁盘是不必要的,实际上,您可以使用缓冲区将所有内容保留在内存中,例如:

from io import StringIO # on python 2, use from cStringIO import StringIO
buffer = StringIO()

# Saving df to memory as a temporary file
df.to_csv(buffer)
buffer.seek(0)
s3.put_object(buffer, Bucket = '[BUCKET NAME]', Key = 'test.txt')

文件大小约为1000万条记录。您是否仍建议将其保留在内存中?@jumpman23这取决于您的硬件规格。任何一种方法都应该有效。这取决于你。好吧,这起作用了。我给了您ole的绿色复选标记。我得到“在散列之前必须对Unicode对象进行编码:TypeError”请不要发布不完整的代码,该代码段中没有定义s3。@HaziqNordin代码已更新,以显示对s3的引用。