Domanda

Diciamo che sto analisi di un file, che utilizza ; come il carattere di commento. Non voglio analizzare commenti. Quindi, se ho una linea simile a questa:

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

C'è un / modo più facile ed elegante per mettere a nudo i caratteri fuori altro che questo:

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'
È stato utile?

Soluzione

Mi consiglia di dire

line.split(";")[0]

che vi darà una stringa di tutti i caratteri fino a, ma non incluso il primo ";" carattere. Se nessun ";" personaggio è presente, allora vi darà l'intera linea.

Altri suggerimenti

Basta fare una spaccatura sulla linea da commentare quindi ottenere il primo elemento ad esempio

line.split(";")[0]

Per Python 2.5 o superiore, vorrei utilizzare il partition metodo :

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

Quindi, ti consigliamo di dividere la linea sul primo punto e virgola, prendere tutto prima di esso, togliere qualsiasi spazio bianco persistente, e aggiungere un carattere di nuova riga.

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

collegamenti alla documentazione:

Reading, splitting, strippaggio, e unendo linee con nuova riga su una sola riga di pitone:

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

Ecco un altro modo:

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

Non ho ancora testato questo con Python, ma ho utilizzare codice simile altrove.

import re
content = open(r'c:\temp\test.txt', 'r').read()
content = re.sub(";.+", "\n")
Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top