2009-07-24 8 views
25

Angenommen, ich analysiere eine Datei, die ; als Kommentarzeichen verwendet. Ich möchte keine Kommentare parsen. Wenn ich also sieht eine Zeile wie folgt aus:In Python 2.4, wie kann ich Zeichen nach ';'

example.com.    600  IN  MX  8 s1b9.example.net ; hello! 

Gibt es eine einfachere/mehr-elegante Art und Weise Zeichen Streifen aus anderen als dies:

rtr = '' 
for line in file: 
    trig = False 
    for char in line: 
     if not trig and char != ';': 
      rtr += char 
     else: 
      trig = True 
    if rtr[max(rtr)] != '\n': 
     rtr += '\n' 
+0

verwendest du Python <2.5? – SilentGhost

+0

Ja, python2.4. Sollte das in der ?? erwähnt haben? – lfaraone

+3

gut python2.4 ist ** zwei ** Versionen hinter der aktuellen stabilen Version. Was denken Sie? – SilentGhost

Antwort

85

I

line.split(";")[0] 
sagen würde empfehlen

, die Ihnen eine Zeichenkette aller Zeichen bis einschließlich, aber nicht einschließlich des ersten ";" Charakter. Wenn nein ";" Charakter ist vorhanden, dann gibt es dir die ganze Linie.

+14

+1 Sie könnten 1 für maxsplit param verwenden, um perfekt zu sein – Jiri

12

einfach eine Spaltung auf der Linie von Kommentar dann erhalten das erste Element zB

line.split(";")[0] 
4

Für Python 2.5 oder größer ist, würde ich die partition Methode:

rtr = line.partition(';')[0].rstrip() + '\n' 
+0

nicht verfügbar für Version <2.5 ++ – ghostdog74

+2

@ ghostdog74: stabile Versionen von Python sind 2.6 und 3.1 – SilentGhost

+1

@SG, das ist in Ordnung, aber immer noch, wenn man ist immer noch mit <2,5 ++ in der Produktion, werden sie diesen Luxus nicht haben. – ghostdog74

2
file = open(r'c:\temp\test.txt', 'r') 
for line in file: print 
    line.split(";")[0].strip() 
+2

beheben Sie Ihre Syntax –

1

Reading, Splitting, Abisolieren und Linien mit Neuem-Zeile alle in einer Zeile des Pythons Verbindungs:

rtr = '\n'.join(line.split(';')[0].strip() for line in open(r'c:\temp\test.txt', 'r')) 
-2

Ich habe dies nicht mit Python getestet, aber ich verwende ähnlichen Code sonst wo.

import re 
content = open(r'c:\temp\test.txt', 'r').read() 
content = re.sub(";.+", "\n") 
+1

Ihre re() fehlt ein Argument und wird daher nicht ausgeführt - sehr glücklich seit ** es würde die erste ";" in der Datei und alles danach ** –

2

So wollen Sie die Linie auf dem ersten Semikolon trennen, nehmen Sie alles, bevor es der Streifen alle verbliebenen Leerzeichen ab, und ein Newline-Zeichen anhängen.

rtr = line.split(";", 1)[0].rstrip() + '\n' 

Links zu Dokumentation:

+0

Links, die Sie bereitstellen und Methoden, die Sie verwenden, sind nicht das gleiche – SilentGhost

0

ist hier eine andere Art und Weise:

 
In [6]: line = "foo;bar" 
In [7]: line[:line.find(";")] + "\n" 
Out[7]: 'foo\n' 
+0

wenn Zeile == "Fubar", die "Fuba \ n" produziert ... das Problem in einem Einzeiler zu korrigieren erzeugt dies : 'line [: Keine wenn line.find ("; ") == -1 else line.find ("; ")]' (was ich sicherlich nicht als eine gute Idee vorschlage). –

Verwandte Themen