2 ngày trước, tôi lần đầu tiên được giới thiệu với Python (và lập trình nói chung). Hôm nay tôi bị kẹt. Tôi đã dành hàng giờ cố gắng tìm một câu trả lời cho những gì tôi nghi ngờ là một vấn đề tầm thường, không ai khác vẫn chưa bị kẹt ở đây:)Python - Làm cách nào để lồng các vòng đọc tệp?
Ông chủ muốn tôi tự làm sạch các tệp .xml HUGE . Tôi đang cố gắng tạo một kịch bản để làm điều đó cho tôi. Sau đây là ví dụ về tệp .xml cũng như kết quả mong muốn của tôi.
Input (File.xml):
<IssueTracking>
<Issue>
<SequenceNum>123</SequenceNum>
<Subject>Subject of Ticket 123</Subject>
<Description>Line 1 in Description field of Ticket 123.
Line 2 in Description field of Ticket 123.
Line 3 in Description field of Ticket 123.</Description>
</Issue>
<Issue>
<SequenceNum>124</SequenceNum>
<Subject>Subject of Ticket 124</Subject>
<Description>Line 1 in Description field of Ticket 124.
Line 2 in Description field of Ticket 124.
Line 3 in Description field of Ticket 124.</Description>
</Issue>
</IssueTracking>
mong muốn Output:
123 Subject of Ticket 123
Line 1 in Description field of Ticket 123.
Line 2 in Description field of Ticket 123.
Line 3 in Description field of Ticket 123.
124 Subject of Ticket 124
Line 1 in Description field of Ticket 124.
Line 2 in Description field of Ticket 124.
Line 3 in Description field of Ticket 124.
Dưới đây là những gì tôi đã có cho đến nay.
with open(File.xml, 'r') as SourceFile: # Opens the file
while 1: # Keep going through the file to the end
SourceFileLine = SourceFile.readline() # Saves lines of the source file
if not SourceFileLine: # Skip empty lines
break
SourceFileLine = SourceFileLine.strip() # Strips the whitespace
if "<SequenceNum>" in SourceFileLine:
SequenceNum = SourceFileLine[13:-14] # Trims the tags, saves the field.
continue
if "<Subject>" in SourceFileLine:
Subject = SourceFileLine[9:-10]
continue
#if "<Description>" in SourceFileLine:
# last_pos = SourceFile.tell()
# while "</Description>" not in SourceFileLine:
# SourceFile.seek(last_pos)
# ?????
#
# Description = Description[22:]
# continue
if "</Issue>" in SourceFileLine:
print(SequenceNum, end = "\t")
print(Subject)
# print(Description)
print("\n")
Tôi đang mắc kẹt trong việc xác định và giữ chân những ba dòng giữa <Description>
thẻ vào một chuỗi duy nhất tôi có thể in trước khi tiếp tục xuống các tập tin nguồn. Bây giờ đã quét hàng tá ví dụ khác về các vòng đọc dòng tệp, tôi nghi ngờ những gì tôi cần là gắn cờ điểm tôi đạt đến trường đích và lồng một vòng lặp đọc khác tại điểm đó trong tệp. Nhưng tôi đã không tìm thấy một ví dụ khác về việc này đang được thực hiện, vì vậy tôi cho rằng tôi đang thiếu một cái gì đó cơ bản hoặc có một cách tốt hơn. Cảm ơn trước sự giúp đỡ!
Python có một built-in phân tích cú pháp XML: http://docs.python.org /library/pyexpat.html –
+1 cho đầu vào, đầu ra mong muốn và những gì bạn đã thử. –
Có lẽ bạn nên sử dụng bộ nối tiếp thân thiện với con người như YAML để xuất dữ liệu khi bạn đã trích xuất nó. Bạn không bao giờ biết khi nào bạn sẽ cần xử lý lại dữ liệu này. –