2017-09-13 18 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

ファイルサイズは約1,000万レコードです。まだそれを記憶に入れておくことをお勧めしますか? – jumpman23

+0

@ jumpman23これはハードウェアの仕様によって異なります。どちらの方法でも動作するはずです。それはあなた次第です。 –

+1

それはうまくいきました。私はあなたにオレンジの緑色のチェックマークを付けました。 – jumpman23

関連する問題