2017-09-13 116 views
0

我正在嘗試將數據幀寫入臨時文件,然後將該臨時文件上載到S3存儲桶中。當我運行我的代碼時,目前沒有發生任何操作。任何幫助將不勝感激。以下是我的代碼:Python將臨時文件寫入S3

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


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

回答

2

您傳遞給s3.put_object的文件句柄是在最後的位置,當你從.read它,它會返回一個空字符串。

>>> df = pd.DataFrame(np.random.randint(10,50, (5,5))) 
>>> temp = tempfile.TemporaryFile(mode='w+') 
>>> df.to_csv(temp) 
>>> temp.read() 
'' 

速戰速決是.seek回到最初......

>>> 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() 
pd.to_csv(buffer) 
buffer.seek(0) 
s3.put_object(buffer, Bucket = '[BUCKET NAME]', Key = 'test.txt') 
+0

文件大小約爲1000萬條記錄。你還會推薦將它保存在內存中嗎? – jumpman23

+0

@ jumpman23取決於您的硬件規格。無論哪種方式應該工作。隨你便。 –

+1

好的,那有效。我給你了'綠色'複選標記。 – jumpman23