3

私はxmlファイルを持っています

<temp>
  <email id="1" Body="abc"/>
  <email id="2" Body="fre"/>
  .
  .
  <email id="998349883487454359203" Body="hi"/>
</temp>

各メールタグのxmlファイルを読みたいです。つまり、一度に電子メール id=1 を読みたい..そこから本文を抽出し、電子メール id=2 を読んで...そしてそこから本文を抽出する...など

ファイルサイズが 100 GB であるため、XML 解析に DOM モデルを使用してこれを実行しようとしましたが、このアプローチは機能しません。次に、使用してみました:

  from xml.etree import ElementTree as ET
  tree=ET.parse('myfile.xml')
  root=ET.parse('myfile.xml').getroot()
  for i in root.findall('email/'):
              print i.get('Body')

ルートを取得したら、コードを解析できなかった理由がわかりません。

iterparse を使用する際のコードは、次のエラーをスローしています。

 "UnicodeEncodeError: 'ascii' codec can't encode character u'\u20ac' in position 437: ordinal not in range(128)"

誰か助けてくれませんか

4

1 に答える 1

8

iterparseの例:

import cStringIO
from xml.etree.ElementTree import iterparse

fakefile = cStringIO.StringIO("""<temp>
  <email id="1" Body="abc"/>
  <email id="2" Body="fre"/>
  <email id="998349883487454359203" Body="hi"/>
</temp>
""")
for _, elem in iterparse(fakefile):
    if elem.tag == 'email':
        print elem.attrib['id'], elem.attrib['Body']
    elem.clear()

fakefileを実際のファイルに置き換えるだけです。詳細については、こちらもお読みください。

于 2012-04-06T07:39:58.873 に答える