1
저는 작업 스케줄러를 사용하여 매 5 분마다 실행되도록 Python 스크립트를 작성하고 지속적으로 증가하는 로그 파일 (텍스트 파일)을 읽고 DB에 데이터를 삽입합니다. 새 로그 파일이 매일 생성됩니다.Python이 지속적으로 증가하는 파일을 읽으려고합니다
포인터를 수정하고 마지막 줄 끝 부분에 포인터를 놓아야하므로 스케줄러가 다시 실행될 때 마지막으로 삽입 된 줄 다음에 시작됩니다. 새 날이 시작되면 포인터는 새 파일의 첫 번째 줄로 돌아갑니다. Seek 함수가이를 수행 할 수는 있지만 아직 방법을 파악할 수 없습니다. 대신 반복적으로 프로그램을 실행하고 중단 한 부분, 당신은 단순히 한 번 프로그램을 실행하고 새로운 콘텐츠에 대한 파일을 모니터링 할 수 있습니다 기억의
import time, os
day=time.strftime("%Y%m%d")
month=time.strftime("%m")
filename=time.strftime("%Y%m%d")
# Check for a new day
currTime = datetime.datetime.now()
lastDay = 0
#Open file in a relative location
logs_dir = os.path.dirname(r'C:\Python27\Logs\\')
rel_path = os.path.join('\\', month, filename + '.log')
abs_file_path = os.path.join(logs_dir, month, filename) + '.log'
file = open(abs_file_path, 'r')
if currTime.day != lastDay:
lastDay = currTime.day
file.seek(first_byte_to_read) #<<-- to reset the pointer ??
else:
file.seek(last_read_byte)
쉽게 : 다른 곳에서 파일의 현재 길이를 기억하고 다음 번에 다시 시작할 수 있습니다. 로그에 삽입하는 것은 지저분합니다. – Amadan
예제에는 로그 파일 처리 또는 여러 번 실행되는 동안 파일 오프셋을 저장하고 검색하는 메커니즘이 표시되지 않습니다. 그러나 일반적인 생각은 파일을 처리하고'file.tell()'을 호출하여 현재 파일 위치를 얻는 것입니다. 그 파일을 어딘가에 저장하면,'file.seek (the_saved_position, 0)'파일을 열어서 계속 진행할 수 있습니다. – tdelaney
파일'file.seek (0, 2)'의 끝을 탐색하고'file.tell()> the_saved_position'을 검사함으로써 처리가 필요한지 알 수 있습니다. – tdelaney