Dưới đây là một phương pháp tốt hơn để chia các dòng.
Lưu ý rằng biến text
về mặt kỹ thuật sẽ là tệp .txt
của bạn và tôi đã cố tình sửa đổi nó để chúng tôi có bối cảnh đầu ra lớn hơn.
from collections import OrderedDict
from pprint import pprint
# Text would be our loaded .txt file.
text = """Serial Number: test Operator ID: test1 Time: 00:03:47 Test Step 1 TP1: 17.25 TP2: 2.46
Serial Number: Operator ID: test2 Time: 00:03:48 Test Step 2 TP1: 17.24 TP2: 2.47"""
# Headers of the intended break-points in the text files.
headers = ["Serial Number:", "Operator ID:", "Time:", "TP1:", "TP2:"]
information = []
# Split our text by lines.
for line in text.split["\n"]:
# Split our text up so we only have the information per header.
default_header = headers[0]
for header in headers[1:]:
line = line.replace[header, default_header]
info = [i.strip[] for i in line.split[default_header]][1:]
# Compile our header+information together into OrderedDict's.
compiled_information = OrderedDict[]
for header, info in zip[headers, info]:
compiled_information[header] = info
# Append to our overall information list.
information.append[compiled_information]
# Pretty print the information [not needed, only for better display of data.]
pprint[information]
Outputs:
[OrderedDict[[['Serial Number:', 'test'],
['Operator ID:', 'test1'],
['Time:', '00:03:47 Test Step 1'],
['TP1:', '17.25'],
['TP2:', '2.46']]],
OrderedDict[[['Serial Number:', ''],
['Operator ID:', 'test2'],
['Time:', '00:03:48 Test Step 2'],
['TP1:', '17.24'],
['TP2:', '2.47']]]]
Phương pháp này nên khái quát hơn so với những gì bạn hiện đang viết và ý tưởng về mã là thứ tôi đã lưu từ một dự án khác. Tôi khuyên bạn nên trải qua mã và hiểu logic của nó.
Từ đây, bạn sẽ có thể lặp qua danh sách information
và tạo tệp .xml
tùy chỉnh của bạn. Tôi cũng khuyên bạn nên kiểm tra dicttoxml
, vì nó có thể giúp cuộc sống của bạn dễ dàng hơn nhiều ở bước cuối cùng.
Liên quan đến mã của bạn, hãy nhớ: Phá vỡ các nhiệm vụ cơ bản dễ dàng hơn là cố gắng kết hợp tất cả chúng thành một. Bằng cách cố gắng tạo tệp xml
trong khi bạn phân chia tệp
[OrderedDict[[['Serial Number:', 'test'],
['Operator ID:', 'test1'],
['Time:', '00:03:47 Test Step 1'],
['TP1:', '17.25'],
['TP2:', '2.46']]],
OrderedDict[[['Serial Number:', ''],
['Operator ID:', 'test2'],
['Time:', '00:03:48 Test Step 2'],
['TP1:', '17.24'],
['TP2:', '2.47']]]]
0, bạn đã tạo một con quái vật khó giải quyết khi nó quay trở lại với các lỗi. Thay vào đó, hãy thực hiện từng bước một - tạo "điểm kiểm tra" rằng bạn là công việc nhất định 100% và sau đó chuyển sang nhiệm vụ tiếp theo. Ngôn ngữ đánh dấu có thể mở rộng, thường được gọi là XML là một ngôn ngữ được thiết kế đặc biệt để dễ dàng giải thích bởi cả con người và máy tính hoàn toàn. Ngôn ngữ xác định một tập hợp các quy tắc được sử dụng để mã hóa một tài liệu ở một định dạng cụ thể. Trong bài viết này, các phương thức đã được mô tả để đọc và viết các tệp XML bằng Python., commonly known as XML is a language designed specifically to be easy to interpret by both humans and computers altogether. The language defines a set of rules used to encode a document in a specific format. In this article, methods have been described to read and write XML files in python.
Lưu ý: Nói chung, quá trình đọc dữ liệu từ tệp XML và phân tích các thành phần logic của nó được gọi là phân tích cú pháp. Do đó, khi chúng tôi đề cập đến việc đọc một tệp XML, chúng tôi đang đề cập đến việc phân tích cú pháp tài liệu XML. & NBSP; In general, the process of reading the data from an XML file and analyzing its logical components is known as Parsing. Therefore, when we refer to reading a xml file we are referring to parsing the XML document.
Trong bài viết này, chúng tôi sẽ xem xét hai thư viện có thể được sử dụng cho mục đích phân tích cú pháp XML. Họ đang:
- Đẹp được sử dụng cùng với trình phân tích cú pháp LXML XML & NBSP;
- Thư viện ElementTree. & NBSP;
Sử dụng đẹp cùng với trình phân tích cú pháp LXML
Với mục đích đọc và viết tệp XML, chúng tôi sẽ sử dụng thư viện Python có tên BeautifulSoup. Để cài đặt thư viện, hãy nhập lệnh sau vào thiết bị đầu cuối. & Nbsp; & nbsp;
pip install beautifulsoup4
Súp đẹp hỗ trợ trình phân tích cú pháp HTML có trong thư viện tiêu chuẩn Python, nhưng nó cũng hỗ trợ một số trình phân tích cú pháp Python của bên thứ ba. Một là trình phân tích cú pháp LXML [được sử dụng để phân tích các tài liệu XML/HTML]. LXML có thể được cài đặt bằng cách chạy lệnh sau trong bộ xử lý lệnh của hệ điều hành của bạn: & nbsp; & nbsp;
pip install lxml
Đầu tiên chúng ta sẽ học cách đọc từ tệp XML. Chúng tôi cũng sẽ phân tích dữ liệu được lưu trữ trong đó. Sau đó, chúng tôi sẽ học cách tạo một tệp XML và ghi dữ liệu vào nó. & NBSP;
Đọc dữ liệu từ tệp XML
Có hai bước cần thiết để phân tích tệp XML:-& nbsp; & nbsp;
- Tìm thẻ & nbsp;
- Trích xuất từ thẻ
Example:
Tệp XML được sử dụng: & nbsp;
Python3
[OrderedDict[[['Serial Number:', 'test'],
['Operator ID:', 'test1'],
['Time:', '00:03:47 Test Step 1'],
['TP1:', '17.25'],
['TP2:', '2.46']]],
OrderedDict[[['Serial Number:', ''],
['Operator ID:', 'test2'],
['Time:', '00:03:48 Test Step 2'],
['TP1:', '17.24'],
['TP2:', '2.47']]]]
1 [OrderedDict[[['Serial Number:', 'test'],
['Operator ID:', 'test1'],
['Time:', '00:03:47 Test Step 1'],
['TP1:', '17.25'],
['TP2:', '2.46']]],
OrderedDict[[['Serial Number:', ''],
['Operator ID:', 'test2'],
['Time:', '00:03:48 Test Step 2'],
['TP1:', '17.24'],
['TP2:', '2.47']]]]
2[OrderedDict[[['Serial Number:', 'test'],
['Operator ID:', 'test1'],
['Time:', '00:03:47 Test Step 1'],
['TP1:', '17.25'],
['TP2:', '2.46']]],
OrderedDict[[['Serial Number:', ''],
['Operator ID:', 'test2'],
['Time:', '00:03:48 Test Step 2'],
['TP1:', '17.24'],
['TP2:', '2.47']]]]
3 [OrderedDict[[['Serial Number:', 'test'],
['Operator ID:', 'test1'],
['Time:', '00:03:47 Test Step 1'],
['TP1:', '17.25'],
['TP2:', '2.46']]],
OrderedDict[[['Serial Number:', ''],
['Operator ID:', 'test2'],
['Time:', '00:03:48 Test Step 2'],
['TP1:', '17.24'],
['TP2:', '2.47']]]]
4[OrderedDict[[['Serial Number:', 'test'],
['Operator ID:', 'test1'],
['Time:', '00:03:47 Test Step 1'],
['TP1:', '17.25'],
['TP2:', '2.46']]],
OrderedDict[[['Serial Number:', ''],
['Operator ID:', 'test2'],
['Time:', '00:03:48 Test Step 2'],
['TP1:', '17.24'],
['TP2:', '2.47']]]]
5[OrderedDict[[['Serial Number:', 'test'],
['Operator ID:', 'test1'],
['Time:', '00:03:47 Test Step 1'],
['TP1:', '17.25'],
['TP2:', '2.46']]],
OrderedDict[[['Serial Number:', ''],
['Operator ID:', 'test2'],
['Time:', '00:03:48 Test Step 2'],
['TP1:', '17.24'],
['TP2:', '2.47']]]]
6[OrderedDict[[['Serial Number:', 'test'],
['Operator ID:', 'test1'],
['Time:', '00:03:47 Test Step 1'],
['TP1:', '17.25'],
['TP2:', '2.46']]],
OrderedDict[[['Serial Number:', ''],
['Operator ID:', 'test2'],
['Time:', '00:03:48 Test Step 2'],
['TP1:', '17.24'],
['TP2:', '2.47']]]]
7[OrderedDict[[['Serial Number:', 'test'],
['Operator ID:', 'test1'],
['Time:', '00:03:47 Test Step 1'],
['TP1:', '17.25'],
['TP2:', '2.46']]],
OrderedDict[[['Serial Number:', ''],
['Operator ID:', 'test2'],
['Time:', '00:03:48 Test Step 2'],
['TP1:', '17.24'],
['TP2:', '2.47']]]]
8[OrderedDict[[['Serial Number:', 'test'],
['Operator ID:', 'test1'],
['Time:', '00:03:47 Test Step 1'],
['TP1:', '17.25'],
['TP2:', '2.46']]],
OrderedDict[[['Serial Number:', ''],
['Operator ID:', 'test2'],
['Time:', '00:03:48 Test Step 2'],
['TP1:', '17.24'],
['TP2:', '2.47']]]]
9pip install beautifulsoup40
pip install beautifulsoup41
pip install beautifulsoup42
pip install beautifulsoup43
pip install beautifulsoup44
pip install beautifulsoup45
pip install beautifulsoup46
pip install beautifulsoup44
pip install beautifulsoup48
pip install beautifulsoup49
pip install lxml0
pip install lxml1
pip install beautifulsoup44
pip install lxml3
pip install lxml4
pip install lxml0
pip install lxml6
pip install lxml7
pip install lxml8
pip install beautifulsoup44
text
0text
1text
2text
3text
4text
5text
6pip install lxml6
text
8text
9
pip install beautifulsoup44
.txt
1.txt
22pip install lxml6
.txt
5OUTPUT:
Viết tệp XML
Viết tệp XML là một quá trình nguyên thủy, lý do cho rằng thực tế là các tệp XML được mã hóa theo một cách đặc biệt. Sửa đổi các phần của tài liệu XML yêu cầu một người để phân tích thông qua nó lúc đầu. Trong mã dưới đây, chúng tôi sẽ sửa đổi một số phần của tài liệu XML đã nói ở trên. & NBSP;
Example:
Python3
[OrderedDict[[['Serial Number:', 'test'],
['Operator ID:', 'test1'],
['Time:', '00:03:47 Test Step 1'],
['TP1:', '17.25'],
['TP2:', '2.46']]],
OrderedDict[[['Serial Number:', ''],
['Operator ID:', 'test2'],
['Time:', '00:03:48 Test Step 2'],
['TP1:', '17.24'],
['TP2:', '2.47']]]]
1 [OrderedDict[[['Serial Number:', 'test'],
['Operator ID:', 'test1'],
['Time:', '00:03:47 Test Step 1'],
['TP1:', '17.25'],
['TP2:', '2.46']]],
OrderedDict[[['Serial Number:', ''],
['Operator ID:', 'test2'],
['Time:', '00:03:48 Test Step 2'],
['TP1:', '17.24'],
['TP2:', '2.47']]]]
2[OrderedDict[[['Serial Number:', 'test'],
['Operator ID:', 'test1'],
['Time:', '00:03:47 Test Step 1'],
['TP1:', '17.25'],
['TP2:', '2.46']]],
OrderedDict[[['Serial Number:', ''],
['Operator ID:', 'test2'],
['Time:', '00:03:48 Test Step 2'],
['TP1:', '17.24'],
['TP2:', '2.47']]]]
3 [OrderedDict[[['Serial Number:', 'test'],
['Operator ID:', 'test1'],
['Time:', '00:03:47 Test Step 1'],
['TP1:', '17.25'],
['TP2:', '2.46']]],
OrderedDict[[['Serial Number:', ''],
['Operator ID:', 'test2'],
['Time:', '00:03:48 Test Step 2'],
['TP1:', '17.24'],
['TP2:', '2.47']]]]
4[OrderedDict[[['Serial Number:', 'test'],
['Operator ID:', 'test1'],
['Time:', '00:03:47 Test Step 1'],
['TP1:', '17.25'],
['TP2:', '2.46']]],
OrderedDict[[['Serial Number:', ''],
['Operator ID:', 'test2'],
['Time:', '00:03:48 Test Step 2'],
['TP1:', '17.24'],
['TP2:', '2.47']]]]
5[OrderedDict[[['Serial Number:', 'test'],
['Operator ID:', 'test1'],
['Time:', '00:03:47 Test Step 1'],
['TP1:', '17.25'],
['TP2:', '2.46']]],
OrderedDict[[['Serial Number:', ''],
['Operator ID:', 'test2'],
['Time:', '00:03:48 Test Step 2'],
['TP1:', '17.24'],
['TP2:', '2.47']]]]
6[OrderedDict[[['Serial Number:', 'test'],
['Operator ID:', 'test1'],
['Time:', '00:03:47 Test Step 1'],
['TP1:', '17.25'],
['TP2:', '2.46']]],
OrderedDict[[['Serial Number:', ''],
['Operator ID:', 'test2'],
['Time:', '00:03:48 Test Step 2'],
['TP1:', '17.24'],
['TP2:', '2.47']]]]
7[OrderedDict[[['Serial Number:', 'test'],
['Operator ID:', 'test1'],
['Time:', '00:03:47 Test Step 1'],
['TP1:', '17.25'],
['TP2:', '2.46']]],
OrderedDict[[['Serial Number:', ''],
['Operator ID:', 'test2'],
['Time:', '00:03:48 Test Step 2'],
['TP1:', '17.24'],
['TP2:', '2.47']]]]
8[OrderedDict[[['Serial Number:', 'test'],
['Operator ID:', 'test1'],
['Time:', '00:03:47 Test Step 1'],
['TP1:', '17.25'],
['TP2:', '2.46']]],
OrderedDict[[['Serial Number:', ''],
['Operator ID:', 'test2'],
['Time:', '00:03:48 Test Step 2'],
['TP1:', '17.24'],
['TP2:', '2.47']]]]
9pip install beautifulsoup40
pip install beautifulsoup41
pip install beautifulsoup42
pip install beautifulsoup43
pip install beautifulsoup44
pip install beautifulsoup45
pip install beautifulsoup46
pip install beautifulsoup44
pip install beautifulsoup48
pip install beautifulsoup49
pip install lxml0
pip install lxml1
pip install beautifulsoup44
pip install lxml3
pip install lxml4
pip install lxml0
pip install lxml8
pip install beautifulsoup44
text
0text
1text
2text
3text
4text
5text
6pip install lxml6
xml
3Output:
text
9pip install beautifulsoup4
4 .txt
1.txt
22
Viết tệp XML provides us with a plethora of tools for manipulating XML files. The best part about it being its inclusion in the standard Python’s built-in library. Therefore, one does not have to install any external modules for the purpose. Due to the xmlformat being an inherently hierarchical data format, it is a lot easier to represent it by a tree. The module provides ElementTree provides methods to represent whole XML document as a single tree.
Viết tệp XML là một quá trình nguyên thủy, lý do cho rằng thực tế là các tệp XML được mã hóa theo một cách đặc biệt. Sửa đổi các phần của tài liệu XML yêu cầu một người để phân tích thông qua nó lúc đầu. Trong mã dưới đây, chúng tôi sẽ sửa đổi một số phần của tài liệu XML đã nói ở trên. & NBSP;
.xml
1pip install beautifulsoup4
4 pip install beautifulsoup4
8.xml
4pip install lxml
0
.xml
6 .xml
77____78 .xml
9text
1text
2text
3text
444545dicttoxml
5
Example:
Python3
pip install beautifulsoup42
dicttoxml
7.txt
22dicttoxml
9pip install beautifulsoup44
xml
1Sử dụng Elementree
Mô -đun Elementree cung cấp cho chúng tôi rất nhiều công cụ để thao tác các tệp XML. Phần tốt nhất về nó là sự bao gồm của nó vào thư viện tích hợp Python tiêu chuẩn. Do đó, người ta không phải cài đặt bất kỳ mô -đun bên ngoài nào cho mục đích. Do XMLformat là một định dạng dữ liệu phân cấp vốn có, việc thể hiện nó bằng một cây dễ dàng hơn rất nhiều. Mô -đun cung cấp ElementTree cung cấp các phương thức để biểu diễn toàn bộ tài liệu XML dưới dạng một cây. & NBSP;
pip install lxml6
[OrderedDict[[['Serial Number:', 'test'],
['Operator ID:', 'test1'],
['Time:', '00:03:47 Test Step 1'],
['TP1:', '17.25'],
['TP2:', '2.46']]],
OrderedDict[[['Serial Number:', ''],
['Operator ID:', 'test2'],
['Time:', '00:03:48 Test Step 2'],
['TP1:', '17.24'],
['TP2:', '2.47']]]]
05pip install lxml6
[OrderedDict[[['Serial Number:', 'test'],
['Operator ID:', 'test1'],
['Time:', '00:03:47 Test Step 1'],
['TP1:', '17.25'],
['TP2:', '2.46']]],
OrderedDict[[['Serial Number:', ''],
['Operator ID:', 'test2'],
['Time:', '00:03:48 Test Step 2'],
['TP1:', '17.24'],
['TP2:', '2.47']]]]
07[OrderedDict[[['Serial Number:', 'test'],
['Operator ID:', 'test1'],
['Time:', '00:03:47 Test Step 1'],
['TP1:', '17.25'],
['TP2:', '2.46']]],
OrderedDict[[['Serial Number:', ''],
['Operator ID:', 'test2'],
['Time:', '00:03:48 Test Step 2'],
['TP1:', '17.24'],
['TP2:', '2.47']]]]
08[OrderedDict[[['Serial Number:', 'test'],
['Operator ID:', 'test1'],
['Time:', '00:03:47 Test Step 1'],
['TP1:', '17.25'],
['TP2:', '2.46']]],
OrderedDict[[['Serial Number:', ''],
['Operator ID:', 'test2'],
['Time:', '00:03:48 Test Step 2'],
['TP1:', '17.24'],
['TP2:', '2.47']]]]
09pip install lxml6
[OrderedDict[[['Serial Number:', 'test'],
['Operator ID:', 'test1'],
['Time:', '00:03:47 Test Step 1'],
['TP1:', '17.25'],
['TP2:', '2.46']]],
OrderedDict[[['Serial Number:', ''],
['Operator ID:', 'test2'],
['Time:', '00:03:48 Test Step 2'],
['TP1:', '17.24'],
['TP2:', '2.47']]]]
07[OrderedDict[[['Serial Number:', 'test'],
['Operator ID:', 'test1'],
['Time:', '00:03:47 Test Step 1'],
['TP1:', '17.25'],
['TP2:', '2.46']]],
OrderedDict[[['Serial Number:', ''],
['Operator ID:', 'test2'],
['Time:', '00:03:48 Test Step 2'],
['TP1:', '17.24'],
['TP2:', '2.47']]]]
12[OrderedDict[[['Serial Number:', 'test'],
['Operator ID:', 'test1'],
['Time:', '00:03:47 Test Step 1'],
['TP1:', '17.25'],
['TP2:', '2.46']]],
OrderedDict[[['Serial Number:', ''],
['Operator ID:', 'test2'],
['Time:', '00:03:48 Test Step 2'],
['TP1:', '17.24'],
['TP2:', '2.47']]]]
13[OrderedDict[[['Serial Number:', 'test'],
['Operator ID:', 'test1'],
['Time:', '00:03:47 Test Step 1'],
['TP1:', '17.25'],
['TP2:', '2.46']]],
OrderedDict[[['Serial Number:', ''],
['Operator ID:', 'test2'],
['Time:', '00:03:48 Test Step 2'],
['TP1:', '17.24'],
['TP2:', '2.47']]]]
08[OrderedDict[[['Serial Number:', 'test'],
['Operator ID:', 'test1'],
['Time:', '00:03:47 Test Step 1'],
['TP1:', '17.25'],
['TP2:', '2.46']]],
OrderedDict[[['Serial Number:', ''],
['Operator ID:', 'test2'],
['Time:', '00:03:48 Test Step 2'],
['TP1:', '17.24'],
['TP2:', '2.47']]]]
15
Output:
Trong các ví dụ sau, chúng ta sẽ xem xét các phương thức riêng biệt để đọc và ghi dữ liệu đến và từ các tệp XML. & NBSP; & NBSP;
Đọc các tệp XML
Để làm tương tự, trước tiên, chúng tôi tạo một thẻ gốc [cha mẹ] dưới tên của cờ vua bằng lệnh et.element [‘cờ vua]. Tất cả các thẻ sẽ rơi xuống bên dưới thẻ này, tức là một khi thẻ gốc đã được xác định, các phần tử phụ khác có thể được tạo bên dưới nó. Sau đó, chúng tôi đã tạo một Subtag/SubLement có tên mở bên trong thẻ cờ bằng lệnh et.subelement []. Sau đó, chúng tôi đã tạo thêm hai khoản phụ khác ở bên dưới lỗ mở có tên E4 và D4. Sau đó, chúng tôi đã thêm các thuộc tính vào các thẻ E4 và D4 bằng SET [] là phương thức được tìm thấy bên trong SubEuity [], được sử dụng để xác định các thuộc tính cho một thẻ. Sau đó, chúng tôi đã thêm văn bản giữa các thẻ E4 và D4 bằng cách sử dụng văn bản thuộc tính được tìm thấy bên trong hàm SubEuity. Cuối cùng, chúng tôi đã chuyển đổi kiểu dữ liệu của các nội dung chúng tôi đang tạo từ 'xml.etree.elementtree.element' sang byte đối tượng, sử dụng lệnh et.tostring [] [mặc dù tên hàm là toString [] trong một số triển khai mà nó chuyển đổi Kiểu dữ liệu thành `byte` thay vì` str`]. Cuối cùng, chúng tôi đã xóa dữ liệu vào một tệp có tên gameofsquares.xml, đây là chế độ `wb` để cho phép viết dữ liệu nhị phân cho nó. Cuối cùng, chúng tôi đã lưu dữ liệu vào tệp của chúng tôi.
Example:
Python3
[OrderedDict[[['Serial Number:', 'test'],
['Operator ID:', 'test1'],
['Time:', '00:03:47 Test Step 1'],
['TP1:', '17.25'],
['TP2:', '2.46']]],
OrderedDict[[['Serial Number:', ''],
['Operator ID:', 'test2'],
['Time:', '00:03:48 Test Step 2'],
['TP1:', '17.24'],
['TP2:', '2.47']]]]
3 xml
5pip install beautifulsoup43
pip install beautifulsoup44
[OrderedDict[[['Serial Number:', 'test'],
['Operator ID:', 'test1'],
['Time:', '00:03:47 Test Step 1'],
['TP1:', '17.25'],
['TP2:', '2.46']]],
OrderedDict[[['Serial Number:', ''],
['Operator ID:', 'test2'],
['Time:', '00:03:48 Test Step 2'],
['TP1:', '17.24'],
['TP2:', '2.47']]]]
20[OrderedDict[[['Serial Number:', 'test'],
['Operator ID:', 'test1'],
['Time:', '00:03:47 Test Step 1'],
['TP1:', '17.25'],
['TP2:', '2.46']]],
OrderedDict[[['Serial Number:', ''],
['Operator ID:', 'test2'],
['Time:', '00:03:48 Test Step 2'],
['TP1:', '17.24'],
['TP2:', '2.47']]]]
21pip install lxml0
[OrderedDict[[['Serial Number:', 'test'],
['Operator ID:', 'test1'],
['Time:', '00:03:47 Test Step 1'],
['TP1:', '17.25'],
['TP2:', '2.46']]],
OrderedDict[[['Serial Number:', ''],
['Operator ID:', 'test2'],
['Time:', '00:03:48 Test Step 2'],
['TP1:', '17.24'],
['TP2:', '2.47']]]]
23pip install beautifulsoup44
[OrderedDict[[['Serial Number:', 'test'],
['Operator ID:', 'test1'],
['Time:', '00:03:47 Test Step 1'],
['TP1:', '17.25'],
['TP2:', '2.46']]],
OrderedDict[[['Serial Number:', ''],
['Operator ID:', 'test2'],
['Time:', '00:03:48 Test Step 2'],
['TP1:', '17.24'],
['TP2:', '2.47']]]]
25[OrderedDict[[['Serial Number:', 'test'],
['Operator ID:', 'test1'],
['Time:', '00:03:47 Test Step 1'],
['TP1:', '17.25'],
['TP2:', '2.46']]],
OrderedDict[[['Serial Number:', ''],
['Operator ID:', 'test2'],
['Time:', '00:03:48 Test Step 2'],
['TP1:', '17.24'],
['TP2:', '2.47']]]]
26pip install lxml0
[OrderedDict[[['Serial Number:', 'test'],
['Operator ID:', 'test1'],
['Time:', '00:03:47 Test Step 1'],
['TP1:', '17.25'],
['TP2:', '2.46']]],
OrderedDict[[['Serial Number:', ''],
['Operator ID:', 'test2'],
['Time:', '00:03:48 Test Step 2'],
['TP1:', '17.24'],
['TP2:', '2.47']]]]
28pip install beautifulsoup44
[OrderedDict[[['Serial Number:', 'test'],
['Operator ID:', 'test1'],
['Time:', '00:03:47 Test Step 1'],
['TP1:', '17.25'],
['TP2:', '2.46']]],
OrderedDict[[['Serial Number:', ''],
['Operator ID:', 'test2'],
['Time:', '00:03:48 Test Step 2'],
['TP1:', '17.24'],
['TP2:', '2.47']]]]
30[OrderedDict[[['Serial Number:', 'test'],
['Operator ID:', 'test1'],
['Time:', '00:03:47 Test Step 1'],
['TP1:', '17.25'],
['TP2:', '2.46']]],
OrderedDict[[['Serial Number:', ''],
['Operator ID:', 'test2'],
['Time:', '00:03:48 Test Step 2'],
['TP1:', '17.24'],
['TP2:', '2.47']]]]
31pip install lxml0
[OrderedDict[[['Serial Number:', 'test'],
['Operator ID:', 'test1'],
['Time:', '00:03:47 Test Step 1'],
['TP1:', '17.25'],
['TP2:', '2.46']]],
OrderedDict[[['Serial Number:', ''],
['Operator ID:', 'test2'],
['Time:', '00:03:48 Test Step 2'],
['TP1:', '17.24'],
['TP2:', '2.47']]]]
33pip install beautifulsoup44
[OrderedDict[[['Serial Number:', 'test'],
['Operator ID:', 'test1'],
['Time:', '00:03:47 Test Step 1'],
['TP1:', '17.25'],
['TP2:', '2.46']]],
OrderedDict[[['Serial Number:', ''],
['Operator ID:', 'test2'],
['Time:', '00:03:48 Test Step 2'],
['TP1:', '17.24'],
['TP2:', '2.47']]]]
30[OrderedDict[[['Serial Number:', 'test'],
['Operator ID:', 'test1'],
['Time:', '00:03:47 Test Step 1'],
['TP1:', '17.25'],
['TP2:', '2.46']]],
OrderedDict[[['Serial Number:', ''],
['Operator ID:', 'test2'],
['Time:', '00:03:48 Test Step 2'],
['TP1:', '17.24'],
['TP2:', '2.47']]]]
36pip install lxml0
[OrderedDict[[['Serial Number:', 'test'],
['Operator ID:', 'test1'],
['Time:', '00:03:47 Test Step 1'],
['TP1:', '17.25'],
['TP2:', '2.46']]],
OrderedDict[[['Serial Number:', ''],
['Operator ID:', 'test2'],
['Time:', '00:03:48 Test Step 2'],
['TP1:', '17.24'],
['TP2:', '2.47']]]]
38[OrderedDict[[['Serial Number:', 'test'],
['Operator ID:', 'test1'],
['Time:', '00:03:47 Test Step 1'],
['TP1:', '17.25'],
['TP2:', '2.46']]],
OrderedDict[[['Serial Number:', ''],
['Operator ID:', 'test2'],
['Time:', '00:03:48 Test Step 2'],
['TP1:', '17.24'],
['TP2:', '2.47']]]]
39[OrderedDict[[['Serial Number:', 'test'],
['Operator ID:', 'test1'],
['Time:', '00:03:47 Test Step 1'],
['TP1:', '17.25'],
['TP2:', '2.46']]],
OrderedDict[[['Serial Number:', ''],
['Operator ID:', 'test2'],
['Time:', '00:03:48 Test Step 2'],
['TP1:', '17.24'],
['TP2:', '2.47']]]]
7[OrderedDict[[['Serial Number:', 'test'],
['Operator ID:', 'test1'],
['Time:', '00:03:47 Test Step 1'],
['TP1:', '17.25'],
['TP2:', '2.46']]],
OrderedDict[[['Serial Number:', ''],
['Operator ID:', 'test2'],
['Time:', '00:03:48 Test Step 2'],
['TP1:', '17.24'],
['TP2:', '2.47']]]]
41[OrderedDict[[['Serial Number:', 'test'],
['Operator ID:', 'test1'],
['Time:', '00:03:47 Test Step 1'],
['TP1:', '17.25'],
['TP2:', '2.46']]],
OrderedDict[[['Serial Number:', ''],
['Operator ID:', 'test2'],
['Time:', '00:03:48 Test Step 2'],
['TP1:', '17.24'],
['TP2:', '2.47']]]]
9[OrderedDict[[['Serial Number:', 'test'],
['Operator ID:', 'test1'],
['Time:', '00:03:47 Test Step 1'],
['TP1:', '17.25'],
['TP2:', '2.46']]],
OrderedDict[[['Serial Number:', ''],
['Operator ID:', 'test2'],
['Time:', '00:03:48 Test Step 2'],
['TP1:', '17.24'],
['TP2:', '2.47']]]]
43pip install lxml0
[OrderedDict[[['Serial Number:', 'test'],
['Operator ID:', 'test1'],
['Time:', '00:03:47 Test Step 1'],
['TP1:', '17.25'],
['TP2:', '2.46']]],
OrderedDict[[['Serial Number:', ''],
['Operator ID:', 'test2'],
['Time:', '00:03:48 Test Step 2'],
['TP1:', '17.24'],
['TP2:', '2.47']]]]
45[OrderedDict[[['Serial Number:', 'test'],
['Operator ID:', 'test1'],
['Time:', '00:03:47 Test Step 1'],
['TP1:', '17.25'],
['TP2:', '2.46']]],
OrderedDict[[['Serial Number:', ''],
['Operator ID:', 'test2'],
['Time:', '00:03:48 Test Step 2'],
['TP1:', '17.24'],
['TP2:', '2.47']]]]
39[OrderedDict[[['Serial Number:', 'test'],
['Operator ID:', 'test1'],
['Time:', '00:03:47 Test Step 1'],
['TP1:', '17.25'],
['TP2:', '2.46']]],
OrderedDict[[['Serial Number:', ''],
['Operator ID:', 'test2'],
['Time:', '00:03:48 Test Step 2'],
['TP1:', '17.24'],
['TP2:', '2.47']]]]
7[OrderedDict[[['Serial Number:', 'test'],
['Operator ID:', 'test1'],
['Time:', '00:03:47 Test Step 1'],
['TP1:', '17.25'],
['TP2:', '2.46']]],
OrderedDict[[['Serial Number:', ''],
['Operator ID:', 'test2'],
['Time:', '00:03:48 Test Step 2'],
['TP1:', '17.24'],
['TP2:', '2.47']]]]
41[OrderedDict[[['Serial Number:', 'test'],
['Operator ID:', 'test1'],
['Time:', '00:03:47 Test Step 1'],
['TP1:', '17.25'],
['TP2:', '2.46']]],
OrderedDict[[['Serial Number:', ''],
['Operator ID:', 'test2'],
['Time:', '00:03:48 Test Step 2'],
['TP1:', '17.24'],
['TP2:', '2.47']]]]
9__150150150[OrderedDict[[['Serial Number:', 'test'],
['Operator ID:', 'test1'],
['Time:', '00:03:47 Test Step 1'],
['TP1:', '17.25'],
['TP2:', '2.46']]],
OrderedDict[[['Serial Number:', ''],
['Operator ID:', 'test2'],
['Time:', '00:03:48 Test Step 2'],
['TP1:', '17.24'],
['TP2:', '2.47']]]]
52pip install beautifulsoup44
[OrderedDict[[['Serial Number:', 'test'],
['Operator ID:', 'test1'],
['Time:', '00:03:47 Test Step 1'],
['TP1:', '17.25'],
['TP2:', '2.46']]],
OrderedDict[[['Serial Number:', ''],
['Operator ID:', 'test2'],
['Time:', '00:03:48 Test Step 2'],
['TP1:', '17.24'],
['TP2:', '2.47']]]]
54[OrderedDict[[['Serial Number:', 'test'],
['Operator ID:', 'test1'],
['Time:', '00:03:47 Test Step 1'],
['TP1:', '17.25'],
['TP2:', '2.46']]],
OrderedDict[[['Serial Number:', ''],
['Operator ID:', 'test2'],
['Time:', '00:03:48 Test Step 2'],
['TP1:', '17.24'],
['TP2:', '2.47']]]]
55pip install beautifulsoup44
[OrderedDict[[['Serial Number:', 'test'],
['Operator ID:', 'test1'],
['Time:', '00:03:47 Test Step 1'],
['TP1:', '17.25'],
['TP2:', '2.46']]],
OrderedDict[[['Serial Number:', ''],
['Operator ID:', 'test2'],
['Time:', '00:03:48 Test Step 2'],
['TP1:', '17.24'],
['TP2:', '2.47']]]]
57[OrderedDict[[['Serial Number:', 'test'],
['Operator ID:', 'test1'],
['Time:', '00:03:47 Test Step 1'],
['TP1:', '17.25'],
['TP2:', '2.46']]],
OrderedDict[[['Serial Number:', ''],
['Operator ID:', 'test2'],
['Time:', '00:03:48 Test Step 2'],
['TP1:', '17.24'],
['TP2:', '2.47']]]]
58pip install beautifulsoup44
[OrderedDict[[['Serial Number:', 'test'],
['Operator ID:', 'test1'],
['Time:', '00:03:47 Test Step 1'],
['TP1:', '17.25'],
['TP2:', '2.46']]],
OrderedDict[[['Serial Number:', ''],
['Operator ID:', 'test2'],
['Time:', '00:03:48 Test Step 2'],
['TP1:', '17.24'],
['TP2:', '2.47']]]]
60[OrderedDict[[['Serial Number:', 'test'],
['Operator ID:', 'test1'],
['Time:', '00:03:47 Test Step 1'],
['TP1:', '17.25'],
['TP2:', '2.46']]],
OrderedDict[[['Serial Number:', ''],
['Operator ID:', 'test2'],
['Time:', '00:03:48 Test Step 2'],
['TP1:', '17.24'],
['TP2:', '2.47']]]]
5[OrderedDict[[['Serial Number:', 'test'],
['Operator ID:', 'test1'],
['Time:', '00:03:47 Test Step 1'],
['TP1:', '17.25'],
['TP2:', '2.46']]],
OrderedDict[[['Serial Number:', ''],
['Operator ID:', 'test2'],
['Time:', '00:03:48 Test Step 2'],
['TP1:', '17.24'],
['TP2:', '2.47']]]]
6[OrderedDict[[['Serial Number:', 'test'],
['Operator ID:', 'test1'],
['Time:', '00:03:47 Test Step 1'],
['TP1:', '17.25'],
['TP2:', '2.46']]],
OrderedDict[[['Serial Number:', ''],
['Operator ID:', 'test2'],
['Time:', '00:03:48 Test Step 2'],
['TP1:', '17.24'],
['TP2:', '2.47']]]]
7[OrderedDict[[['Serial Number:', 'test'],
['Operator ID:', 'test1'],
['Time:', '00:03:47 Test Step 1'],
['TP1:', '17.25'],
['TP2:', '2.46']]],
OrderedDict[[['Serial Number:', ''],
['Operator ID:', 'test2'],
['Time:', '00:03:48 Test Step 2'],
['TP1:', '17.24'],
['TP2:', '2.47']]]]
64[OrderedDict[[['Serial Number:', 'test'],
['Operator ID:', 'test1'],
['Time:', '00:03:47 Test Step 1'],
['TP1:', '17.25'],
['TP2:', '2.46']]],
OrderedDict[[['Serial Number:', ''],
['Operator ID:', 'test2'],
['Time:', '00:03:48 Test Step 2'],
['TP1:', '17.24'],
['TP2:', '2.47']]]]
9[OrderedDict[[['Serial Number:', 'test'],
['Operator ID:', 'test1'],
['Time:', '00:03:47 Test Step 1'],
['TP1:', '17.25'],
['TP2:', '2.46']]],
OrderedDict[[['Serial Number:', ''],
['Operator ID:', 'test2'],
['Time:', '00:03:48 Test Step 2'],
['TP1:', '17.24'],
['TP2:', '2.47']]]]
66pip install beautifulsoup41
pip install beautifulsoup42
[OrderedDict[[['Serial Number:', 'test'],
['Operator ID:', 'test1'],
['Time:', '00:03:47 Test Step 1'],
['TP1:', '17.25'],
['TP2:', '2.46']]],
OrderedDict[[['Serial Number:', ''],
['Operator ID:', 'test2'],
['Time:', '00:03:48 Test Step 2'],
['TP1:', '17.24'],
['TP2:', '2.47']]]]
69Output: