2015-11-03 8 views
6

ich eine Textdatei haben, die viele Dateien Pfad hält datei.txt:Verwendung Regex Dateipfad zu extrahieren und sie in Python speichern

C:\data\AS\WO\AS_WOP_1PPPPPP20070506.bin 
C:\data\AS\WO\AS_WOP_1PPPPPP20070606.bin 
C:\data\AS\WO\AS_WOP_1PPPPPP20070708.bin 
C:\data\AS\WO\AS_WOP_1PPPPPP20070808.bin 
... 

Was ich tat, mit Regex das Datum zu extrahieren aus Pfad:

import re 

textfile = open('file.txt', 'r') 
filetext = textfile.read() 
textfile.close() 

data = [] 

for line in filetext: 
    matches = re.search("AS_[A-Z]{3}_(.{7})([0-9]{4})([0-9]{2})([0-9]{2})", line) 
    data.append(line) 

es gibt nicht, was ich will.

sollte Meine Ausgabe wie folgt sein:

year month 
2007  05 
2007  06 
2007  07 
2007  08 

und es dann als Liste von Listen speichern:

[['2007', '5'], ['2007', '6'], ['2007', '7'], ['2007', '8']] 

oder speichern es als Pandas Serie.

gibt es einen Weg mit regex zu bekommen, was ich will!?

/(....)(..)..\.bin$/ 

Gruppe 1 wird das Jahr, während Gruppe 2 hat den Monat:

+0

Sie sagen, der Ausgang ist nicht das, was Sie erwartet hatten, aber ich sehe nicht, dass Ihr Code keine Ausgabe überhaupt produziert . –

+1

'textfile.read()' gibt den gesamten Inhalt der Datei als eine lange Zeichenfolge zurück. Die 'for line in filetext'-Schleife wiederholt jedes ** Zeichen **. –

+0

@John-Gordon genau, ich habe die einzelnen Zeichenketten. und auch readline() gibt mir nur die erste Zeile wieder Zeichenkette – GeoCom

Antwort

2

versuchen dies mit Pandas:

df = pd.read_csv('yourfile.txt',header=None) 
df.columns = ['paths'] 
# pandas string method extract takes a regex 
df['paths'].str.extract('(\d{4})(\d{2})') 

Ausgang:

 0 1 
0 2007 05 
1 2007 06 
2 2007 07 
3 2007 08 
+0

das ist genau das, was ich wollte, danke – GeoCom

3

Sie können Ihre Regex dies vereinfachen. Ich nehme an, dass das Format in der ganzen Datei gilt.

Nun . stellt jeden Charakter und \. repräsentiert „Punkt“ oder wörtlichen .. $ bedeutet am Ende der Zeichenfolge . Also, ich bin .bin am Ende der Zeile und Tag und nur Gruppierung Jahr und Monat zusammen.

+1

Ja .. Bessere Antwort. – Maroun

+1

@ amit-joki Ich habe nicht verstanden, was du meinst, ich bin ein Neuling mit Regex. Kannst du deinen Code erweitern und erklären – GeoCom

+2

@Milban Ich hoffe, meine Bearbeitung hilft –

Verwandte Themen