2016-07-26 15 views
1

Ich möchte ein Nginx-Zugriffsprotokoll mit Pandas Python Bibliothek read_csv Funktion analysieren. Ich verwende den folgenden Code:Mehrere Anführungszeichen in Pandas

pd.read_csv('lb-access_cache.log', delim_whitespace=True, quotechar='"') 

Es wäre möglich, mehr als eine QuoteChar angeben, zu behandeln, auch die Elemente in eckigen Klammern oder eckige Klammern als Spalt?

Zum Beispiel möchte ich in einer Zeichenfolge wie dem folgenden 3 Spalten erhalten.

Hallo „Welt Hallo“ [Welt ist wunderschön]

Antwort

3

Dies wird tun, benötigen Sie einen regulären Ausdruck anstelle von September zu verwenden:

df = pd.read_csv(log_file, 
       sep=r'\s(?=(?:[^"]*"[^"]*")*[^"]*$)(?![^\[]*\])', 
       engine='python', 
       usecols=[0, 3, 4, 5, 6, 7, 8], 
       names=['ip', 'time', 'request', 'status', 'size', 'referer', 'user_agent'], 
       na_values='-', 
       header=None 
       ) 
+0

Einige Leute tut mir Petitionen mit einem] im URL, so dass die gierige Suche nach den Daten in eckigen Klammern den Regex unterbricht. Ich konnte es nicht beheben, ohne den gierigen Lookahead zu entfernen. Wenn beispielsweise jemand nach GET/test] HTTP fragt, wird die Zeit als "DATE] \" GET/test "ausgewählt. –

+0

können Sie die Ausgabe veröffentlichen – SerialDev

Verwandte Themen