2016-08-09 254 views
-4

Ich habe eine Textdatei mit mehreren Zeilen und möchte herausfinden, welche Zeilen Werte größer als 85% haben.Verwenden Sie mehr als Ausdruck, um Textdateizeilen zu filtern?

'workdata worka worka1 size 84% total' 
'workdata workb workb1 size 89% total' 
'workdata workc workc1 size 63% total' 
'workdata workd workd1 size 94% total' 

Kann jemand bitte zeigen, wie ich nur die Sätze mit 85% oder mehr in der fünften Spalte bekommen kann?

+6

Wo bist du in deinem Versuch stecken geblieben? – StoryTeller

+0

Sie sollten einen regulären Ausdruck schreiben, um die Zahl herauszuziehen. Ich würde vorschlagen, diese Ressourcen auschecken: [Regex-Tutorial] (http://regexr.com/), [Re-Modul] (https://docs.python.org/2/library/re.html). – shwoop

+0

Verwenden Sie eine Regex (über ['re 'Modul] (https://docs.python.org/2/library/re.html#module-re)), um die Ziffern vor dem'% 'zu extrahieren. wandle sie in eine Ganzzahl um und sieh nach, ob sie größer als 85 ist. – martineau

Antwort

0

Wenn Sie den Prozentsatz wird immer in der fünften Spalte sein kennen, dann spaltet nur jede Zeile auf Platz entferne das Prozentzeichen und verwandle es in einen Float. Etwas wie dieses:

lines = open("fileName", "r").read().splitlines() 
for row in lines: 
    if float(row.split()[4].replace("%",""))>85: 
     print(row) 
+0

das funktioniert perfekt. Vielen Dank! –

1

Sie müssen zuerst Prozent extrahieren und dann die darauf basierenden Zeilen filtern.

import re 

def extract_percent(line): 
    # doing extraction 
    try: 
     return int(re.findall('[0-9]+%', line)[0][:-1]) 
    except: 
     return 0 

print [line for line in lines if extract_percent(line) > 85] 

Wenn nichts gefunden wird, wird 0 zurückgegeben. Andernfalls wird die Nummer vor % zurückgegeben. Wenn Sie mehrere Prozentzahlen in der Zeichenfolge haben, wird die erste zurückgegeben.

Es kann ein bisschen kniffliger werden, wenn der Prozentsatz float sein kann, , aber es ist auch nicht so schwer. Spielen Sie einfach mit dem regulären Ausdruck [0-9]+%.

Wenn die Position (fünfte Spalte) festgelegt ist, können Sie die extract_percent Funktion auf diese Weise umschreiben:

def extract_percent(line): 
    try: 
     return int(line.split()[4][:-1]) 
    except: 
     return 0 
+1

Du machst nur schlechte Fragen wie diese ... und dein Einzug folgt nicht [PEP 8 - Style Guide for Python Code] (https: // www. python.org/dev/peps/pep-0008/), so ist es nicht einmal ein großartiges Beispiel. – martineau

+0

@martineau: Danke für den Tipp! Einzug ist jetzt festgelegt. –

+0

der Prozentsatz ist immer in der gleichen Position, so dass die: -1 wird funktionieren. Es stoppt bei der ersten Übereinstimmung und gibt 84 zurück. Ich denke, dass ich die Datei vielleicht nicht an der richtigen Stelle einlese oder sie nicht durchblättere ... –