2010-11-20 13 views
1

Bir birleştirilmiş bir diff dosyasını bir çalışma olarak pyparsing kullanarak ayrıştırmaya çalışıyorum ve doğru bir şey alamıyorum. İşte beni neden olan benim diff dosyasının bir parçası endişelendiren:Püskürtme kullanarak bir satırın başına boşluk eşleştirme

(... some stuff over...) 
banana 
+apple 
orange 

ilk satır "ardından "muz"" ile başlar. Bir sınır ayrıştırmak için aşağıdaki ifadeyi vardır: tek bir satır ayrıştırılırken Bu işleri

linestart = Literal(" ") | Literal("+") | Literal("-") 
line = linestart.leaveWhitespace() + restOfLine 

ama devamlı dosyayı ayrıştırmak çalıştığınızda, "leaveWhitespace" talimat geçen sonunda çözümleyici başlangıç ​​yapmak hat. Örneğimde, "banana" ayrıştırıldıktan sonra, sonraki char "\ n" (leaveWhitespace nedeniyle) ve ayrıştırıcı "" veya "+" veya "-" eşleşmeye çalışır ve böylece bir hata atar.

Bunu doğru şekilde nasıl halledebilirim?

+0

belirtebilirsiniz ?! – PaulMcG

+0

Bende ödev yok, sadece pıhtılaşmayı öğrenmek istiyorum. – subb

+0

Lütfen wiki sayfasını http://pyparsing.wikispaces.com adresinden ziyaret edin. Orada çevrimiçi dokümanlara ve makalelere bağlantılar var. Ve wiki ana sayfasının Tartışma sekmesinde sorular yayınlamaktan çekinmeyin. Pıhtılaşmaya hoş geldiniz! – PaulMcG

cevap

1

Her seferinde bir satırı okuyabilir ve ayrıştırabilirsiniz. Aşağıdaki kod benim için çalışıyor.

from pyparsing import Literal, restOfLine 

linestart = Literal(" ") | Literal("+") | Literal("-") 
line = linestart.leaveWhitespace() + restOfLine 

f = open("/tmp/test.diff") 
for l in f.readlines(): 
    fields = line.parseString(l) 
    print fields 

Ve çıkış

[' ', 'banana'] 
['+', 'apple'] 
[' ', 'orange'] 

olduğunu Yoksa birkaç satır ayrıştırmak varsa, açıkça pyparsing ödev verir LineEnd

linestart = Literal(" ") | Literal("+") | Literal("-") 
line = linestart.leaveWhitespace() + restOfLine + LineEnd() 
lines = ZeroOrMore(line) 
lines.parseString(f.read()) 
+0

Evet, bu işe yarıyor ama sorun, dosyanın diğer bölümleri için başka bir ayrıştırıcıya sahip olduğum. Örneklemimin biraz basitleştirilmiş olduğunu itiraf ediyorum. Orijinal yayına bazı ayrıntıları ekleyeceğim. – subb

+0

Dosyadaki diğer şeylerle bile bir satırı bir hatta ayrıştırmanız gerekir. Ama cevabımı, tüm dosyayı bir dize olarak ayrıştırmanın bir yolunu içerecek şekilde güncelledim. Püskürtmek için yeni olduğumu ve en iyi uygulama olup olmadığından emin olmadığımı söylemeliyim. –

İlgili konular