2010-10-18 31 views
5

Tôi đang cố gắng hoàn thành một tác vụ đơn giản bằng Python và tôi mới sử dụng ngôn ngữ (tôi là C++). Tôi hy vọng ai đó có thể chỉ cho tôi đúng hướng.Tìm kiếm tệp Python cơ bản và I/O

Vấn đề: Tôi có một tập tin XML (12MB) đầy đủ các dữ liệu và bên trong file có bắt đầu thẻ 'xmltag' và thẻ kết thúc '/ xmltag' đại diện cho sự khởi đầu và kết thúc của phần dữ liệu tôi muốn kéo ra.

Tôi muốn điều hướng thông qua tệp mở này với vòng lặp và cho từng trường hợp tìm thẻ bắt đầu và sao chép dữ liệu trong phần sang tệp mới cho đến thẻ kết thúc. Sau đó tôi muốn lặp lại điều này vào cuối tệp.

Tôi hài lòng với tệp I/O nhưng không phải là vòng lặp hiệu quả nhất, tìm kiếm và trích xuất dữ liệu.

Tôi thực sự thích giao diện của ngôn ngữ và hy vọng tôi sẽ tham gia nhiều hơn để tôi có thể trả lại cho cộng đồng.

Cảm ơn bạn!

Trả lời

3

Kiểm tra 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 - câu trả lời tuyệt vời. – duffymo

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

không thực sự đẹp ... – eumiro

+1

đẹp là chủ quan! yêu cầu rất đơn giản, sử dụng các phương thức chuỗi Python đơn giản là đủ. – ghostdog74

+1

OP không cho biết liệu 'xmltag' có một số thuộc tính hay không. – eumiro

0

Không cần cài đặt BeautifulSoup, Python bao gồm trình phân tích cú pháp ElementTree trong thư viện chuẩn của nó.

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

Câu trả lời BeautifulSoup là tốt nhưng điều này thực hiện nhanh hơn và không đòi hỏi một thư viện bên ngoài:

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') 
Các vấn đề liên quan