Open decten opened 3 years ago
🔨 완성 코드입니다 🔨
import json
from tkinter import *
from tkinter.ttk import *
from tkinter import filedialog
def get_log_file():
root.filename = filedialog.askopenfilename(parent = root, initialdir = './', title = 'Open Log files',
filetypes = (('log files', '*.log'), ('all files', '*.*')))
if (root.filename != ''):
root.log_dict = get_log_data()
show_log(root.log_dict)
def get_log_data():
log_dict = dict()
with open('data.log', encoding='cp949') as f:
for line in f:
# ""별로 추출헤서 날짜&시간이랑 ip를 따로 받아야 함 -> 걍 통째로 받아서 date, time, ip만 가져옴
_, _, _, log_date, log_time, log_ip, *dummy = line.replace('"', '').split()
if (log_ip not in log_dict):
log_dict[log_ip] = {'count': 1, 'date': [log_date], 'time' : [log_time]}
else:
log_dict[log_ip]['count'] += 1
log_dict[log_ip]['date'].append(log_date)
log_dict[log_ip]['time'].append(log_time)
return log_dict
def show_log(log_dict):
for k, v in log_dict.items():
log_treeview.insert('', 'end', text = k, values = (v['count'], v['date'][0], v['time'][0]))
# 날짜가 둘 이상인 경우
for i in range(1, len(v['date'])):
if v['date'][i - 1] == v['date'][i]:
date = ' '
else:
date = v['date'][i]
if v['time'][i - 1] == v['time'][i]:
time = ' '
else:
time = v['time'][i]
# 시간이 같지 않는 경우(중복 날짜에 대해서 시간만 출력)
if (time != ' '):
log_treeview.insert('', 'end', text='', values=(' ', date, time))
def save_json(log_dict):
filename = filedialog.asksaveasfilename(parent=root, defaultextension='.json', filetypes=[('json files', '*.json')])
if (filename != '' and root.log_dict):
with open(filename, 'w', encoding='utf-8') as f:
f.write(json.dumps(root.log_dict))
root = Tk()
root.title('결과창')
root.filename = ''
root.log_dict = None
frame = Frame(root)
scrollbar = Scrollbar(frame)
scrollbar.pack(side = 'right', fill = 'y')
log_treeview = Treeview(frame, columns = ['1', '2', '3'], displaycolumns = ['1', '2', '3'])
log_treeview.pack(fill = 'both')
scrollbar['command'] = log_treeview.yview
frame.grid(row = 0, column = 0, columnspan = 4, sticky = 'we')
log_treeview.configure(yscrollcommand=scrollbar.set)
log_treeview.column('#0', width = 120, anchor = 'center')
log_treeview.heading('#0', text='IP')
log_treeview.column('1', width = 100, anchor = 'e')
log_treeview.heading('1', text = 'IP 횟수')
log_treeview.column('2', width = 100, anchor = 'center')
log_treeview.heading('2', text = 'IP 날짜')
log_treeview.column('3', width = 100, anchor = 'center')
log_treeview.heading('3', text = 'IP 시간')
Button(root, text = '결과 저장...', command = save_json).grid(row = 1, column = 1, padx = 5, pady = 5)
Button(root, text = '파일 선택...', command = get_log_file).grid(row = 1, column = 2, padx = 5, pady = 5)
root.mainloop()
1. 상황
아이피 저장 완료 화면 출력 + 파일 저장 수정 중
2. 코드
3. 계획