2013-11-04 2 views
0

내 프로그램은 현재 로그를 디스크에 씁니다. 로그 파일은 시간 및 로그 메시지라는 두 개의 필드가있는 일련 화 된 객체입니다. 파일 이름은 임의의 32 자 문자열입니다.디스크에 임의의 이름을 가진 파일을 저장하고 파이썬의 특정 기간에만 적합하게 읽는 방법

또한 사용자가 기간 (초)과 종료 시간 (모든 에포크 타임 스탬프)을 입력 할 수있는 로그를 볼 수있는 장고의 웹 UI가 있으므로 endtime-duration에서부터 endtime이 표시됩니다. 나는 현재 일을하고 무엇

:

  1. 뒤로
  2. 로그를 뱉어 루프를 디스크에서 모든 로그 사용자로드/시간으로 UI를
  3. 정렬 기록을 갱신 할 때마다 읽기, 첫째 ENDTIME-기간보다 오래된 로그가 발생할 때 로그가 종료 시각보다 최신 인 경우 계속하고, 휴식 내가 원하는 무엇

:

  1. 사용자가 요청한 로그를 읽거나 적어도 매번 모든 것을 읽는 것보다 낫습니다.

제약 :

  1. 내가 로그 파일 이름을 변경할 수 없습니다,하지만 난 다른 (하위)에 로그 파일을 저장할 수있는 폴더
  2. 싱글 스레드 없음 캐시 (로그 만 표시 할 수 있습니다 필요한 모든 로그를 읽은 후 부분 표시 없음)

감사!

+0

얼마나 많은 로그 파일이 있습니까? – Fiver

+0

개별 파일 (특히 임의의 이름)을 저장할 특별한 이유가 있습니까? 그렇지 않다면 sqlite와 같은 간단한 데이터베이스로 쉽게 해결할 수있는 것 같습니다. 파일 이름으로 타임 스탬프를 저장하는 것이 옵션일까요? – Audionautics

+0

각 로그 파일에는 앱 실행에 대한 정보가 포함되어 있으며 앱 로그, 앱 스크린 샷 등이 포함되어 있으므로 데이터베이스가 너무 많습니다. –

답변

0

수정 한 파일 os.path.getmtime을 사용하여 읽은 파일을 필터링 할 수 있습니다. 파일의 첫 번째 줄을 읽으면 요청한 시간대와 가치가 있는지 여부를 판단하는 데 도움이됩니다. 또한, 생성 시간을 반영하여 폴더별로 로그 파일을 분할 할 수 있으므로 진행할 파일의 양이 줄어 듭니다.

>>> import os.path 
>>> import time 
>>> tmp_fname = '/tmp/tst' 
>>> with open(tmp_fname, 'w') as f: 
...  pass 
... 
>>> os.path.getctime('/tmp/tst') 
1383596461.0 
>>> time.ctime(os.path.getctime(tmp_fname)) 
'Mon Nov 4 20:21:01 2013' # changed 
0

타임 스탬프로 폴더를 만들고 평소와 같이 로그를 작성한 다음 타임 스탬프별로 폴더를 검색하십시오.

import time 
import os 

directory = str(time.time()) 
log_file = 'random_leters' 
if not os.path.exists(directory): 
    os.makedirs(directory) 
path = 'path_to_directory' 
file_path = os.path.join(path, log_file) 
#Some method of writing to logs 
with open(file_path, 'w') as f: 
    ''' 
    Write to log file 
    ''' 

time_range = [start_time, finish_time] 

for i in range(start_time, finish_time): 
    if os.path.exists(os.path.join(path_to_logs, i)): 
     ''' 
     Read Files 
     ''' 

시간을 반복 가능하게 만들고 경로를 만들어야하지만 작동합니다.

관련 문제