轉載一段簡潔明瞭的python程式碼 實現了讀取檔案並按行反轉後輸出

張國平發表於2021-11-16

事情是這樣,我在用python自帶的logging.FileHandler,輸出logging記錄,主要是記錄主力合約切換的。很簡單。


就是用米筐的get_dominant或者聚寬的get_dominant_future去查詢一段時間品種的主力合約,返回的都是是日期為index,合約名稱為值的Pandas.Series。這裡可以用 Series自帶的drop_duplicates(), 如果返回一個主力合約,說明沒有切換;如果返回為2說明有切換,次數可以讀取一個值的index作為切換日期輸出到log檔案備註。

def check_dominant(symbol,startdate,enddate) -> str:
   """
   傳入合約名日期,返回str
   :param symbol:
   :return:
   """
   dominant_symbol_list = rq.get_dominant(symbol.upper(),startdate,enddate)
   if dominant_symbol_list is not None:
      last_symbol_series = dominant_symbol_list.tail(self.check_days+1).drop_duplicates()
      if len(last_symbol_series)>1:
         self.dominant_change =True
         strLen = f"請注意 在{list(last_symbol_series.index)[-1]}日,({symbol})主力合約切換: {last_symbol_series[-2]} -> {last_symbol_series[-1]}. "
         logger.info(strLen)


本來很平常一段使用,但是在log檔案時往下寫入,就是查詢必須滾動到最下。如果很多,還真是麻煩。想有沒有方法逆序寫入log文件,最新的放在最上面;搜尋logging文件和stackflow討論;基本方案繼承FileHandler重寫寫入文件方法,因為從頭插入檔案效率太低了,並不鼓勵。


後面想想就找個笨方法吧,每次輸出儲存後,在按行讀取反轉從寫一個逆序的log;自己寫了些程式碼實現,感覺實在笨拙。無意搜尋到一段簡潔明瞭的python程式碼,感覺實在明瞭,可以算是pythonic code。分享如下:

with open(filename_sequence) as f, open(filename) as fout:
   fout.writelines(reversed(f.readlines()))


來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/22259926/viewspace-2842447/,如需轉載,請註明出處,否則將追究法律責任。

相關文章