Tôi đang phân tích cú pháp tệp XML thành khung dữ liệu gấu trúc. Sử dụng mã bên dưới, tôi có thể lấy thành công mọi thứ, nhưng mã này sử dụng phiên bản đã chỉnh sửa của XML đầy đủ. XML đầy đủ Có một loạt dữ liệu tóm tắt ở đầu bảng dữ liệu chính, xem Full XML đây . Dòng tôi cần để bắt đầu giải nén là dòng 641 trong XML.
Ví dụ XML:
### khoảng 300 dòng tạo kiểu ###
Kết quả CPET |
Toán tử |
|
Dữ liệu bệnh nhân |
Dữ liệu quản trị |
ID |
B013 |
Tiêu đề |
|
Họ |
Dữ liệu |
### Bỏ qua vài trăm dòng ###
Biến |
Đơn vị |
Nghỉ ngơi |
Khởi động |
AT |
AT % tối đa |
RCP |
RCP % tối đa |
V'O2peak |
Giá trị tối đa tuyệt đối |
V'O2 |
L/phút |
0,34 |
- |
1,83 |
76 |
2,28 |
94 |
2,42 |
2,59 |
### Bỏ qua vài dòng nữa ###
Borg |
|
- |
- |
- |
- |
- |
- |
- |
- |
###### CẦN BẮT ĐẦU CHIẾT XUẤT TỪ HÀNG NÀY ######
t |
Pha |
Điểm đánh dấu |
V'O2 |
V'CO2 |
V'E |
V'E/V'O2 |
V'E/V'CO2 |
HR |
RER |
V'O2/kg |
PetO2 |
PetCO2 |
ExCO2 |
BF |
WR |
Borg |
### Tệp XML tiếp tục giống nhau từ đây với cùng cấu trúc ###
Mã hiện tại của tôi:
từ etree nhập lxml
nhập gấu trúc dưới dạng pd
với open('cortex.xml', 'r') dưới dạng infile:
root = etree.parse(infile)
không gian tên = {'o': 'urn:schemas-microsoft-com:office:office',
'x': 'urn:schemas-microsoft-com:office:excel',
'ss': 'urn:schemas-microsoft-com:office:bảng tính'}
dữ liệu = []
ws = root.xpath('/ss:Workbook/ss:Worksheet', namespaces=namespaces)
nếu len(ws) > 0:
bảng = ws[0].xpath('./ss:Table', namespaces=namespaces)
nếu len(bảng) > 0:
hàng = bảng [0].xpath('./ss:Row', namespaces=namespaces)
cho hàng trong hàng:
nhiệt độ = []
ô = row.xpath('./ss:Cell/ss:Data', namespaces=namespaces)
cho các ô trong ô:
temp.append(cell.text)
dữ liệu.append(temp)
df = pd.DataFrame(data[2:], columns=data[0])
Làm cách nào để chỉnh sửa mã hiện tại để chỉ trích xuất
Dữ liệu tương ứng với các thẻ trong bảng dữ liệu chính? Lượng dữ liệu tóm tắt ở trên cùng có thể khác nhau, do đó, việc mã hóa điểm bắt đầu không phải là một lựa chọn.
<ô>ô>
lúc đầu
Các thuộc tính dữ liệu chính là StyleID="Đo lườngDataTableHead"
, có thể tìm kiếm dựa trên điều này và bắt đầu giải nén từ đó không? Tôi hoàn toàn bối rối trước câu hỏi này.
Nếu bảng phân tích luôn là bảng cuối cùng, bạn có thể tạo giá trị bool phụ nếu giá trị t
(giá trị đầu tiên của bảng được phân tích cú pháp) được đặt thành ĐÚNG VẬY
và nối nó:
từ etree nhập lxml
nhập gấu trúc dưới dạng pd
với open('cortex_full.xml', 'r') dưới dạng infile:
root = etree.parse(infile)
không gian tên = {'o': 'urn:schemas-microsoft-com:office:office',
'x': 'urn:schemas-microsoft-com:office:excel',
'ss': 'urn:schemas-microsoft-com:office:bảng tính'}
dữ liệu = []
phân tích = Sai
ws = root.xpath('/ss:Workbook/ss:Worksheet', namespaces=namespaces)
nếu len(ws) > 0:
bảng = ws[0].xpath('./ss:Table', namespaces=namespaces)
nếu len(bảng) > 0:
hàng = bảng [0].xpath('./ss:Row', namespaces=namespaces)
cho hàng trong hàng:
nhiệt độ = []
ô = row.xpath('./ss:Cell/ss:Data', namespaces=namespaces)
cho các ô trong ô:
nếu cell.text == 't':
phân tích = Đúng
nếu phân tích:
temp.append(cell.text)
nếu phân tích:
dữ liệu.append(temp)
df = pd.DataFrame(data[2:], columns=data[0])
in(df.head())
t Điểm đánh dấu pha V'O2 V'CO2 \
0 0:00:10 Còn lại Không có 0,251524741119069 0,236014510176694
1 0:00:20 Nghỉ ngơi Không có 0,434384403499744 0,411231246288168
2 0:00:30 Nghỉ ngơi Không có 0,343945761508378 0,341020990667946
3 0:00:40 Nghỉ ngơi Không có 0,220729503668137 0,196421701276079
4 0:00:50 Nghỉ ngơi Không có 0,257787497144625 0,217026849651075
V'E V'E/V'O2 V'E/V'CO2 HR RER \
0 11.89836 36.3356700392092 38.7235513323219 0 0 0.938335167851211
1 15.59965 31.7517155056147 33.5394017952007 0 0 0.946698921450597
2 14.8086111111111 36.8447951082032 37.1607949595411 0 0.991496418424796
3 9.04168333333334 29.5090743425324 33.1609149651866 0 0 0.889875154938032
4 9.99203333333333 28.3149237809555 33.6328585383268 0 0.841882760238438
V'O2/kg PetO2 PetCO2 ExCO2 \
0 4.42046996694321 115.479326671601 28.7635623488774 -0.0145537951547244
1 7.63417229349286 111.689054293116 33.3331430668641 -0.0219190689603747
2 6.04474097554267 117.675559264742 29.9207171560161 -0.00289989981300173
3 3.87925314003756 115.526557480056 28.6691007319681 -0.0216309094198363
4 4.53053597793717 109.339321572498 32.0697189407024 -0.0343156864209755
BF WR Borg
0 19.16 0 Không có
1 12,55 0 Không có
2 14.8333333333333 0 Không có
3 17.5566666666667 0 Không có
4 18,7 0 Không có
Tôi là một lập trình viên xuất sắc, rất giỏi!