Mã Python dưới đây hoạt động cho một XML. Vấn đề xảy ra khi tôi cố gắng mở và phân tích nhiều tệp XML, có cấu trúc tương tự và được lưu trong thư mục [dòng 4 -> data = open ['[0-9] .xml', "rb"]. Tôi đang thử các biểu thức thường xuyên, nhưng tôi không chắc điều đó có hoạt động để đặt tên tài liệu không.
Tên của tất cả các tài liệu là "11111.xml, 222222.xml, 33333.xml ...", v.v."11111.xml, 22222.xml, 33333.xml ..." and so on.
import xml.etree.ElementTree as ET
import re
data = open ['[0-9].xml',"rb"]
tree = ET.parse [data]
lst_jugador = tree.findall['data_panel/players/player']
for jugador in lst_jugador:
print [jugador.find['name'].text, jugador.get["id"]]
stovfl
14,5K7 Huy hiệu vàng22 Huy hiệu bạc49 Huy hiệu đồng7 gold badges22 silver badges49 bronze badges
Hỏi ngày 22 tháng 8 năm 2017 lúc 15:33Aug 22, 2017 at 15:33
Bạn có thể sử dụng mô -đun glob
.
import glob
import xml.etree.ElementTree as ET
filenames = glob.glob["[0-9].xml"] # change the pattern to match your case
for filename in filenames:
with open[filename, 'r', encoding="utf-8"] as content:
tree = ET.parse[content]
lst_jugador = tree.findall['data_panel/players/player']
for jugador in lst_jugador:
print [jugador.find['name'].text, jugador.get["id"]]
Đã trả lời ngày 22 tháng 8 năm 2017 lúc 15:42Aug 22, 2017 at 15:42
Stamaimerstamaimanstamaimer
5.9555 Huy hiệu vàng31 Huy hiệu bạc52 Huy hiệu Đồng5 gold badges31 silver badges52 bronze badges
1
Nếu tất cả các tệp của bạn trong một thư mục cần được phân tích cú pháp, bạn chỉ có thể sử dụng os.listdir[]
from os import listdir
for file in listdir[]:
#if you have to be more selective inside your directory
#just add a conditional to skip here
with open[file, "rb"]:
tree = ET.parse[data]
lst_jugador = tree.findall['data_panel/players/player']
for jugador in lst_jugador:
print [jugador.find['name'].text, jugador.get["id"]]
Đã trả lời ngày 22 tháng 8 năm 2017 lúc 15:40Aug 22, 2017 at 15:40
TonytonyTony
1.2781 Huy hiệu vàng13 Huy hiệu bạc36 Huy hiệu đồng1 gold badge13 silver badges36 bronze badges
2
Tôi đang cố gắng phân tích nhiều tệp XML trong một thư mục và trả lại dữ liệu được phân tích cú pháp vào bảng điều khiển Python. Khi tôi đưa chúng vào bảng điều khiển, tôi có thể xuất chúng dưới dạng CSV và phân tích dữ liệu của tôi ở đó. Kịch bản của tôi sẽ chạy chỉ với một tệp, nhưng khi tôi sử dụng GLOB để phân tích toàn bộ thư mục của các tệp, hàm phân tích cú pháp xml.etree cung cấp cho tôi ngoại lệ này. Tôi đã sử dụng Glob vì tên tệp XML của tôi không đẹp. Tôi đã sử dụng hàm dấu thời gian và có rất nhiều, rất nhiều trong số chúng.
Mã: //pastebin.com/8irzg5td
Tệp "Parsecta.py", dòng 35, trong tệp parse1 [] "Parsecta.py", dòng 16, trong parse1 cta = et.parse [files] file "/l Library /python2.7/xml/etree/elementtree.py ", dòng 1182, trong parse tree.parse [nguồn, phân tích cú pháp] tệp" /l Library/frameworks/python.framework/versions Etree/ElementTree.py ", dòng 647, trong phân tích phân tích = mở [nguồn," rb "]
TypeError: ép buộc Unicode: Cần chuỗi hoặc bộ đệm, danh sách tìm thấy
Tôi có đúng rằng Parse sẽ không chấp nhận danh sách các tệp không? Làm thế nào tôi nên có được xung quanh điều này hoặc làm lại kịch bản của tôi?
Ngoài ra, thư mục các tệp XML của tôi đều được định dạng như thế này dưới đây. Vì vậy, sẽ có thông tin lặp đi lặp lại trong mỗi tài liệu XML [ID, OP's, v.v.] - Tôi không chắc liệu điều này có ảnh hưởng đến chức năng phân tích cú pháp trên nhiều tệp hay không.
6881
63
41.77981533474392
-87.64655821058486
52566
8526239
06
376
6876
47
41.786399841308594
-87.73844146728516
52778
TL: DR - phân tích nhiều tệp XML trong thư mục đến bảng điều khiển Python và xuất chúng dưới dạng CSV. Sử dụng Glob và XML.etree
Cảm ơn bạn Pythonistas.