2017-09-05 2 views
-1

Angenommen, ich habe einen TXT. Datei, die wie folgt aussieht:Dateien in Python schneiden mit Bedingungen

0 day0 event_data0 
    1 day1 event_data1 
    2 day2 event_data2 
    3 day3 event_data3 
    4 day4 event_data4 
    ........ 
    n dayn event_datan 

    #where: 
    #n is the event index 
    #dayn is the day when the event happened. year-month-day format 
    #event_datan is what happened at the event. 

Aus dieser Datei ich brauche einen neuen mit allen Veranstaltungen zu schaffen, die zwischen zwei bestimmten Terminen geschehen. wie nach dem 7. September 2003 und vor Weihnachten 2006. Könnte mir jemand dieses Problem helfen? Sehr geschätzt!

+1

Was haben Sie versucht, das selbst zu lösen? –

Antwort

0

Sieht aus wie das datetime Modul ist, was Sie wollen. Durchlaufen Sie die Datei Zeile für Zeile, bis das Timedelta zwischen dem Datum der aktuellen Zeile und dem Anfangsschwellenwert (in Ihrem Beispiel vom 7. September 2003) positiv ist; Hören Sie auf zu iterieren, wenn Sie Weihnacht 2006 durchbrechen. Laden Sie die Zeilen entweder in einen Pandas-Datenrahmen oder in ein nupy-Array.

0

Lucas, können Sie dies versuchen:

import re 
import os 
from datetime import datetime as dt 


__date_start__ = dt.strptime('2003-09-07', "%Y-%m-%d").date() 
__date_end__ = dt.strptime('2006-12-25', "%Y-%m-%d").date() 

f = open('file.txt', 'r').read() 
os.remove('events.txt') 

for i in f: 
    date = re.search('\d{4}\-\d{2}-\d{2}',i).group(0) 
    if date != '': 
     date_converted = dt.strptime(date, '%Y-%m-%d').date() 
     if (date_converted > __date_start__) and (date_converted < __date_end__): 
      open('events.txt', 'a').write(i) 

Sie ändern __date_start__ und __date_end__ Werte zu Ihrem Wunsch-Intervall, dann wird der Code in den Zeilen suchen einen regulären Ausdruck, die yyyy-mm-dd mit dem Datumsformat entsprechen. Also, es wird in Bereich zu vergleichen (Datum Start & Ende) und, wenn wahr, eine events.txt Datei den Inhalt der Zeile anhängen.

0

Ich nehme an, dass Ihre Datei tabulatorgetrennt ist, so dass Sie das Pandas-Paket verwenden können, um es zu lesen. Fügen Sie einfach die erste Zeile mit den Spaltennamen (Index, Datum, Ereignis) in Ihre TXT-Datei ein, getrennt durch Tab, und lesen Sie dann die Daten ein.

df = pandas.read_csv('txt_file.txt', sep='\t', index_col=0) 
#index_col=0 just sets your first column as index 

Nachdem Sie dies getan haben, folgen Sie den Schritten von diesem link. Das wird im Wesentlichen Ihre Frage beantworten, wie Sie Ereignisse zwischen zwei Daten auswählen, indem Sie einfach dieses Paket verwenden. Auf diese Weise können Sie einen neuen Datenrahmen nur mit den von Ihnen benötigten Ereignissen zurückgeben.

0

Sie haben nicht beschrieben, dass Sie speziell für "nach dem 7. September 2003 und vor Weihnachten 2006" wollen. oder haben Sie andere Möglichkeiten für diese beiden Daten?

wenn speziell für "nach dem 7. September 2003 und vor Weihnachten 2006." dann können Sie mit regex Modul meiner Meinung nach Ergebnis:

import re 
c=r"([0-9]{1,2}\s+)(2003-09-07).+(2006-12-25)\s+\w+" 
with open("event.txt","r") as f: 
    file_data=f.readlines() 
    regex_search=re.search(c,str(file_data)) 
    print(regex_search.group()) 

Sie auch Bedingungen mit Gruppe() verwenden können, oder Sie können findall() -Methode verwenden.