サイズが約 85MB の XML ファイルを処理中です。現在、私は1つを処理しようとしています。私がやっていることは、zip をダウンロードし、ディスクに抽出し、XML を Python Dict に変換し、いくつかの変更を加えてから、Dict を保存し、MongoDB に送信することです。Python dict に変換する場合を除き、プロセスがフリーズ/消失します。
このスクリプトは、Ubuntu 13.04 サーバー、2.6 の 4 コア、16 GB の RAM、および 1 TB 15,000 RPM の VM で実行しています。実行中のスクリプトを監視しています。基本的に、Python は 7 分間で RAM の 12% を占有します。その後、プロセスが使用率の高いリストから外れ、端末からのパイプが動かなくなります。CTRL+Z で強制終了すると、"Write failed: Broken pipe"が返されます。
端末に最後に出力されたのは"Converting dailyprice_0505_eur.xml.zip"で、おそらく xmltodict で何かを疑っていますが、正直なところ立ち往生しています。サンプルコードとデータは、私がこれをテストするのを手伝ってくれる人なら誰でもうまくいくはずです. どんな助けでも大歓迎です!ありがとう。
#Importing
import urllib, xmltodict, os
from zipfile import ZipFile
#Getting Working Dir
abspath = os.path.abspath(__file__)
root = os.path.dirname(abspath) + "/"
print "Current Working Directory: " + root
#Defining
urlAuth = 'https://dl.dropboxusercontent.com/u/9235267/'
dailypriceFL = ['dailyprice_0505_eur.xml.zip']
dailyPriceDict = {}
for x in dailyPriceFL:
print ' * Downloading',x
urllib.urlretrieve(urlAuth+x, x)
print ' * Extracting',x
with ZipFile(x, "r") as z:
z.extractall(root)
print ' * Converting',x
f = open(root+x.replace(".zip",""))
data = xmltodict.parse(f.read())
f.close()
print ' * Adding Currency to Dict',x
for y in data['prices']['price']:
y.update({"currency": x[-7:].replace(".xml","").upper()})
print ' * Ammending',x
dailyPriceDict.update(data)
print ' * Deleting',x
os.remove(root+x)
os.remove(root+x.replace(".zip",""))
print ' * Finished',x