2016-06-20 4 views
0

インターネットからファイルを取得し、データフレームとして保存します(ファイルをコンピュータに保存せずに)。 計算を実行し、必要なデータフレームを保存します。フォーマットをcsvファイルとして保存し、それらを圧縮して元のソースに戻します(下のコードを参照)。 これは完全にうまく動作しますが、何百ものファイルを送信しなければならず、 のデータフレームをcsvファイルに保存して、移動中に圧縮する(つまりコンピュータに保存しないで)以下は私のコードです。複数の.CSVファイルを圧縮してディスクに保存せずに送信する

file_names=['A','B','C'] 
hdll_url = 'http://XYZ' 
saving_folder_url = 'C:\Users\Desktop\Testing_Folder' 

general = [] 
for i in file_names: 
    url = ('http://') 
    data1 = requests.get(url) 
    Z1 = zipfile.ZipFile(StringIO.StringIO(data1.content)) 
    x=pd.read_csv(Z1.open('%s.tsv'%i), sep = '\t', names=["Datetime","Power"]) 
    x['Datetime'] = pd.to_datetime(x['Datetime']) 
    x = x.set_index("Datetime") 
    x = x.resample('H', how= 'sum') 
    general.append(x) 

ABC = pd.DataFrame(general[0]['Power'] + general[1]['Power'] + general[3]['Power'] * 11.363) 
ABC.to_csv('%s\ABC.tsv'%saving_folder_url, 
        sep='\t',header=False,date_format='%Y-%m-%dT%H:%M:%S.%f') 
ABC_z1 = zipfile.ZipFile('%s\ABC.zip'%saving_folder_url,mode='w') 
ABC_z1.write("%s\ABC.tsv"%saving_folder_url) 
ABC_z1.close() 

ABC_files1 = {'file': open("%s\ABC.zip"%saving_folder_url,'rb')} 
ABC_r1 = requests.put(hdll_url, files=ABC_files1, headers = {'content-type':'application/zip', 
         'Content-Disposition': 'attachment;filename=ABC.zip' 
            }) 

XYZ = pd.DataFrame(general[0]['Power'] + general[1]['Power']*100) 
XYZ.to_csv('%s\XYZ.tsv'%saving_folder_url, 
        sep='\t',header=False,date_format='%Y-%m-%dT%H:%M:%S.%f') 
XYZ_z1 = zipfile.ZipFile('%s\XYZ.zip'%saving_folder_url,mode='w') 
XYZ_z1.write("%s\XYZ.tsv"%saving_folder_url) 
XYZ_z1.close() 

XYZ_files1 = {'file': open("%s\XYZ.zip"%saving_folder_url,'rb')} 
XYZ_r1 = requests.put(hdll_url, files=XYZ_files1, headers = {'content-type':'application/zip', 
         'Content-Disposition': 'attachment;filename=XYZ.zip' 
            }) 

P.S:私は.zipファイル形式でファイルを送信させて頂いております。

答えて

0

は)(BytesIOを見てください:

memory_file = BytesIO() 
with zipfile.ZipFile(memory_file, 'w') as zf: 
    zi = zipfile.ZipInfo('your_filename.txt') 
    zi.date_time = time.localtime(time.time())[:6] 
    zi.compress_type = zipfile.ZIP_DEFLATED 
    zf.writestr(zi, 'your file content goes here') 

memory_file.seek(0) 

そして、putメソッドに渡す:その線に沿って

requests.put(<your_url>, data=memory_file, header=<your_headers>) 

か何か。私はコードをテストしなかったが、最初の部分はsend_file()を使ってファイルをクライアントに渡すフラスコのアプリケーションから取得した。

+0

この方法では、ファイルを圧縮する前にファイルをcsv/.txtファイルとして保存していますか? – Muhammad

+0

ハードディスクに何も書き込まれません。 BytesIOオブジェクトはメモリ内に存在します。 – nucleon

+0

しかし、あなたのどこかから 'your_filename.txt'が届いていますか? – Muhammad

関連する問題