2010-10-18 9 views
5

Python'da basit bir görevi tamamlamaya çalışıyorum ve dile yeni geliyorum (Ben C++). Umarım birisi bana doğru yönde işaret edebilir.Temel Python dosyası aranıyor ve I/O

Sorun: Verilerle dolu bir XML dosyasına (12mb) sahibim ve dosya içinde 'xmltag' başlangıç ​​etiketlerine ve sonlandırmak istediğiniz veri bölümlerinin başlangıcını ve sonunu temsil eden son etiketleri '/ xmltag' var. çıkarmak.

Ben bir döngü ile ve bir başlangıç ​​etiketi bulun ve bitiş etiketi kadar yeni bir dosyaya bölüm içindeki veri kopyalamak her örneği için bu açık dosyaya gezinmek istiyorum. Daha sonra bunu dosyanın sonuna kadar tekrarlamak isterim.

ben arama ve verilerin ayıklanması, dosyanın I/O ancak en verimli döngü mutluyum.

Gerçekten dilin görünüm gibi ve umarım ben topluma geri vermek, böylece daha fazla dahil alacağım.

Büyük teşekkürler! , Piton hakkında okuma değerinde

büyük bir serbest kitabın It'a: Python 3 içine

cevap

3

Kontrol BeautifulSoup

from BeautifulSoup import BeautifulSoup 

with open('bigfile.xml', 'r') as xml: 
    soup = BeautifulSoup(xml): 
    for xmltag in soup('xmltag'): 
     print xmltag.contents 
+0

+1 - büyük cevap. – duffymo

2

dalış bu konuda harika bir bölüm var!

-2
xml=open("xmlfile").read() 
x=xml.split("</xmltag>") 
for block in x: 
    if "<xmltag>" in block: 
     print block.split("<xmltag>")[-1] 
+0

pek hoş değil ... – eumiro

+1

nice subjektif! gereksinim basittir, basit Python dizesi yöntemleri kullanmak yeterlidir. – ghostdog74

+1

OP, xmltag'in bazı özniteliklere sahip olup olmadığını belirtmedi. – eumiro

0

BeautifulSoup'u yüklemenize gerek yok, Python standart kitaplığındaki ElementTree ayrıştırıcısını içerir.

from xml.etree import cElementTree as ET 
tree = ET.parse('myfilename') 
new_tree = ET('new_root_element') 
for element in tree.findall('.//xmltag'): 
    new_tree.append(tree.element) 
print ET.tostring(new_tree) 
1

BeautifulSoup cevap iyidir ama bu daha hızlı çalıştırır ve harici bir kütüphane gerektirmez:

import xml.etree.cElementTree as ET 
tree = ET.parse('xmlfile.xml') 
results = (elem for elem in tree.getiterator('xmltag')) 

# in Python 2.7+, getiterator() is deprecated; use tree.iter('xmltag')