2 gün önce Python'a (ve genelde programlamaya) başlamıştım. Bugün sıkıştım. Ben çok önemsiz bir sorun olduğunu düşündüğüm bir yanıt bulmaya çalışıyorum saatler geçirdim, kimse henüz burada sıkışmış değil:)Python - Dosya okuma döngüleri nasıl yuvalanır?
Patron, HUGE .xml dosyalarını elle okunabilir bir şeye manuel olarak temizlememi istiyor . Bunu benim için yapacak bir senaryo oluşturmaya çalışıyorum. Aşağıdaki, .xml dosyasının yanı sıra istediğim çıktı örneğidir.
Girişi (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>
İstenilen Çıktı: İşte
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.
Ben şimdiye kadar ne var olduğunu.
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")
Ben belirlenmesi ve ben kaynak dosyayı aşağı devam etmeden önce yazdırabilirsiniz tek bir dize halinde <Description>
etiketleri arasında bu üç satırları istinat sıkışıp kaldım. Şimdi, düzinelerce başka dosya satırı okuma döngüsünü taradıktan sonra, ihtiyacım olan şeyin, hedef alana ulaştığım noktaya işaret etmesi ve dosyada bu noktadan başka bir okuma döngüsünün bulunması gerektiğinden şüpheleniyorum. Ama bunun yapıldığına dair başka bir örnek bulamadım, bu yüzden temel bir şeyi kaçırdığımı veya daha iyi bir yol olduğunu farz ediyorum. Yardım için şimdiden teşekkür ederiz!
Python yerleşik bir XML ayrıştırıcı: http://docs.python.org Giriş, istenen çıktı ve denediğiniz için /library/pyexpat.html –
+1. –
Büyük olasılıkla siz çıktıktan sonra veri çıkışı için YAML gibi insan dostu bir serileştirici kullanmalısınız. Bu verileri bir daha işlemeye ne zaman ihtiyaç duyacağınızı asla bilemezsiniz. –