2017-09-05 47 views
-1

假設我有一個txt文件。文件看起來像這樣:使用條件在python中切片文件

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. 

從這個文件,我需要創建一個新的與所有兩個特定日期之間發生的事件。比如2003年9月7日和2006年聖誕節前。 有人可以幫我解決這個問題嗎?非常感激!

+1

你試圖自己解決這個問題? –

回答

0

看起來像datetime模塊是你想要的。逐行掃描文件,直到當前行的日期和開始閾值日期(在您的示例中爲2003年9月7日)之間的時間間隔爲正;當您違反聖誕節2006年時停止迭代。將行加載到熊貓數據框或numpy數組中。

0

盧卡斯,你可以試試這個:

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) 

你會改變__date_start____date_end__值,你的願望區間,然後,該代碼將搜索行與日期yyyy-mm-dd的格式相匹配的正則表達式。那麼,它將在範圍內進行比較(日期開始&結束),如果爲true,則附加events.txt文件的行內容。

0

我假設你的文件是製表符分隔的,所以你可以使用熊貓包讀取它。只需在標籤中分隔的.txt文件中添加列名(索引,日期,事件)的第一行,然後讀取數據。

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

完成之後,請按照此link中的步驟操作。這將基本回答你如何通過簡單地使用這個包來選擇兩個日期之間的事件的問題。這樣您就可以僅用您需要的事件返回新的數據框。

0

你還沒有描述你特別想要「2003年9月7日之後和2006年聖誕節之前」。或者你有這兩個日期的其他選項?

特別適用於「2003年9月7日之後和2006年聖誕節之前」。那麼你就可以得到在我看來,正則表達式模塊的結果是:

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()) 

您還可以使用與組(條件),也可以使用的findall()方法。