我正在处理大小约为 85MB 的 XML 文件。目前我只是想处理一个。我正在做的是下载一个 zip,解压缩到磁盘,然后将 XML 转换为 Python Dict,更改一些内容,然后保存 Dict,并将其发送到 MongoDB。除非我要转换为 Python 字典,否则进程会冻结/消失..
我在具有 Ubuntu 13.04 服务器、4 个 2.6 核、16GB 内存和 1TB 15,000RPM 的 VM 上运行此脚本。我正在监视脚本运行时,基本上 python 在 7 分钟内占用了 12% 的 RAM,然后消失了,进程从我的高使用率列表中掉下来,我从终端的管道只是不动。我用 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