0

Pythonコードを実行している私のAzure関数からストレージblobにファイルを出力しようとしています。できるだけ早く私は圧縮のいずれかの形式を使用して起動し、ファイルを結合出力にこれを読み戻すよう、しかしAzure関数+ Python - 出力圧縮zipファイル

with zipfile.ZipFile('Data_out.zip', 'w') as myzip: 
    myzip.write('somefile.js') 
print 'adding somefile.js' 

RFile = open('Data_out.zip', 'r').read() 
output = open(os.environ['returnfile'], 'w') 
output.write(RFile) 

:私は、次のコードを使用して、任意の圧縮せずにファイルを返す達成しました私のストレージBLOBにコピーされると、破損して判読できなくなります。

import zipfile 

try: 
    import zlib 

    compression = zipfile.ZIP_DEFLATED 
except: 
    compression = zipfile.ZIP_STORED 

modes = {zipfile.ZIP_DEFLATED: 'deflated', 
     zipfile.ZIP_STORED: 'stored', 
     } 

print 'creating archive' 
zf = zipfile.ZipFile('Data_out.zip', mode='w') 
try: 
    print 'adding log.txt and outputfile with compression mode', modes[compression] 
    zf.write('log.txt', compress_type=compression) 
    zf.write('somefile.js', compress_type=compression) 
finally: 
    print 'closing' 
    zf.close() 

RFile = open('Data_out.zip', 'r').read() 
output = open(os.environ['returnfile'], 'w') 
output.write(RFile) 

さて、これは私のwebjobsフォルダの完全に機能するのzipファイルを生成します。しかし、私はこれを私のストレージBLOBに正しくコピーすることができません。私の推測では、.read()と.write()を併用すると、圧縮ファイルを扱う際にはあまり意味がありません。しかし、現時点では、私は次に何をすべきか分からずに立ち往生しています。

私はPython 2.7を使用しています。

何か提案がありますか?

EDIT
正確なエラーの更なる明確化私が経験しています:

RFile = open('Data_out.zip', 'r').read() 
output = open(os.environ['returnfile'], 'w') 
output.write(RFile) 

を使用している場合、私は機能スクリプトを終えることができていますが、私の中に表示されたzipファイルをAzureストレージBLOBはサイズがわずか数バイトで、破損しています。私のwebjobsストレージに残っているzipファイルは実際約250kbで、ファイルをWebstorageから元に戻すことができます。

だから私のエラーの原因は、私の出力コードで最も可能性が高いです。

RFile = open('Data_out.zip', 'r').read() 
output = open(os.environ['returnfile'], 'w') 
output.write(RFile) 
+0

表示されているエラーを共有できますか? –

+0

私は、本文中で私が経験しているエラーのより詳細な説明を含んでいます。あなたがより多くの情報を必要とするかどうかを教えてください。 – Krande

答えて

0

だから、いくつかのより多くのテストの後、私は私の問題への解決策を見つけました。私は紺色のストレージのためのpython SDKに目を向けました。これにより私はより多くのコントロールができました。

私はAzureストレージパッケージをインストールするためにKUDUを使用しましたが(正しくインストールするためにPIPをアップグレードしなければなりませんでした)、 "/ env/Lib/site-packages" so:

sys.path.append(os.path.abspath(os.path.join(os.path.dirname(__file__), '..', 'env/Lib/site-packages'))) 
from azure.storage.blob import BlockBlobService 

出力方法は、https://docs.microsoft.com/en-us/azure/storage/storage-python-how-to-use-blob-storageと同じです。

コードは次のように終わった:

block_blob_service = BlockBlobService(account_name='myaccount', account_key='mykey') 
block_blob_service.create_container(username) 
block_blob_service.create_blob_from_path(
    username, 
    returnfile, 
    'Data_out.zip') 

と、それはそれでした!

関連する問題