【備忘録】ちょっとしたメモ書き【備忘録】

自分でやったこと調べてみた事とのメモ書きブログです
主に周辺機器の翻訳した取り説や故障修理の手順を記録しています。

データ処理(SQLite取り込み前のー前処理案)

2023年09月10日 | python?

名前が変わるやつの取り込み例


import re
import os

# ファイル名にマッチする正規表現パターンを指定
file_pattern = r'\d{8}[a-zA-Z0-9]+\.txt'  # 日付とサーバー名を含むファイル名の正規表現

# カレントディレクトリ内のファイルを走査し、正規表現にマッチするファイルを取得
matching_files = [file for file in os.listdir('.') if re.match(file_pattern, file)]

if matching_files:
    # マッチするファイルが存在する場合、最新のファイルを取得
    latest_file = max(matching_files, key=lambda x: os.path.getmtime(x))
    
    # 最新のファイルを開いて読み込む
    with open(latest_file, 'r') as file:
        lines = file.readlines()

    # linesを使ってデータの処理を行うことができます
else:
    print("マッチするファイルが見つかりませんでした")

 

 

 


特定のコマンドを検索してその後の5行を取り出してみるやつ


import glob

# ファイル名にマッチするパターンを指定
file_pattern = 'TeraTermLog_*'  # ファイル名のパターンを設定

# パターンにマッチするファイルの一覧を取得
matching_files = glob.glob(file_pattern)

if matching_files:
    # パターンにマッチするファイルが存在する場合、最新のファイルを取得
    latest_file = max(matching_files, key=lambda x: os.path.getmtime(x))
    
    # 最新のファイルを開いて読み込む
    with open(latest_file, 'r') as file:
        lines = file.readlines()

    # linesを使ってデータの処理を行うことができます
else:
    print("マッチするファイルが見つかりませんでした")

# TeraTermで取得したテキストファイルを開く
with open('teraterm_output.txt', 'r') as file:
    lines = file.readlines()

# 特定のコマンドを探す
target_command = "特定のコマンド"  # 検索したいコマンドを設定
matching_lines = []

for i, line in enumerate(lines):
    if target_command in line:
        matching_lines.append(i)

# 特定のコマンドの後ろから5行を抽出
result_lines = []
for index in matching_lines:
    for i in range(index + 1, min(index + 6, len(lines))):  # コマンドの後ろから5行までを抽出
        result_lines.append(lines[i])

# 抽出した行を表示
for line in result_lines:
    print(line.strip())

 

 

コメント
  • X
  • Facebookでシェアする
  • はてなブックマークに追加する
  • LINEでシェアする

番外 Sqlite3でログ(3用)2取り込みー

2023年09月05日 | python?

import sqlite3

# SQLiteデータベースに接続
conn = sqlite3.connect('log_data.db')
cursor = conn.cursor()

# データベースにテーブルを作成(既に作成済みの場合はスキップ)
cursor.execute('''
    CREATE TABLE IF NOT EXISTS logs (
        id INTEGER PRIMARY KEY,
        timestamp DATETIME,
        event_type TEXT,
        additional_info TEXT
    )
''')

# テキストファイルからログデータを読み取り、データベースに挿入(重複を避ける)
with open('server_logs.txt', 'r') as file:
    for line in file:
        data = line.strip().split(' ')
        if len(data) >= 3:
            timestamp = data[0] + ' ' + data[1]
            event_type = data[2]
            additional_info = ' '.join(data[3:]) if len(data) > 3 else ''

            # 重複をチェックするためのクエリ
            cursor.execute('SELECT id FROM logs WHERE timestamp = ? AND event_type = ? AND additional_info = ?', (timestamp, event_type, additional_info))
            existing_data = cursor.fetchone()

            if not existing_data:
                # 重複がない場合のみ挿入
                cursor.execute('INSERT INTO logs (timestamp, event_type, additional_info) VALUES (?, ?, ?)', (timestamp, event_type, additional_info))

conn.commit()
conn.close()

コメント
  • X
  • Facebookでシェアする
  • はてなブックマークに追加する
  • LINEでシェアする

番外 Sqlite3でログ管理 (3用)1

2023年09月05日 | python?

import sqlite3
import tkinter as tk
from tkinter import ttk

# SQLiteデータベースに接続
conn = sqlite3.connect('log_data.db')
cursor = conn.cursor()

# Tkinterウィンドウを作成
window = tk.Tk()
window.title('ERR_LOG Viewer')

# 更新ボタンを作成
def update_treeview():
    load_data()

update_button = tk.Button(window, text='更新', command=update_treeview)
# 更新ボタンを左下に配置
update_button.pack(side='bottom', anchor='sw')  # ボタンを左下 (southwest) に配置

# ツリービューを作成してヘッダーを設定
tree = ttk.Treeview(window, columns=('Timestamp', 'Event Type', 'Additional Info'), show='headings')
tree.heading('Timestamp', text='Report_time', command=lambda: sort_column(tree, 'Timestamp', False))
tree.heading('Event Type', text='Event Type', command=lambda: sort_column(tree, 'Event Type', False))
tree.heading('Additional Info', text='Server_Info', command=lambda: sort_column(tree, 'Additional Info', False))
tree.pack(fill='both', expand=True)  # ツリービューをウィンドウにフィットさせる

# ツリービューの 'Additional Info' 列にスクロールバーを追加
vsb = ttk.Scrollbar(window, orient='vertical', command=tree.yview)
vsb.pack(side='right', fill='y')
tree.configure(yscrollcommand=vsb.set)

# 列の幅を設定
tree.column('Timestamp', width=130)  # 幅130ピクセル
tree.column('Event Type', width=80)  # 幅 80ピクセル
tree.column('Additional Info', width=600)  # 幅600ピクセル

# データベースからデータを取得して表示
def load_data():
    cursor.execute('SELECT timestamp, event_type, additional_info FROM logs')
    data = cursor.fetchall()
    
    # ツリービューをクリア
    for item in tree.get_children():
        tree.delete(item)
    
    # 新しいデータを挿入
    for row in data:
        tree.insert('', 'end', values=row)

load_data()  # 初回のデータ読み込み

# 列のソート関数を定義
def sort_column(tv, col, reverse):
    l = [(tv.set(k, col), k) for k in tv.get_children('')]
    l.sort(reverse=reverse)
    for index, (val, k) in enumerate(l):
        tv.move(k, '', index)
    tv.heading(col, command=lambda: sort_column(tv, col, not reverse))

# メインループを開始
window.mainloop()

# データベース接続を閉じる
conn.close()

 

コメント
  • X
  • Facebookでシェアする
  • はてなブックマークに追加する
  • LINEでシェアする

Sqlite3でログをシコシコ2(2.7)

2023年09月05日 | python?

import sqlite3
import Tkinter as tk
import ttk

# SQLiteデータベースに接続
conn = sqlite3.connect('log_data.db')
cursor = conn.cursor()

# Tkinterウィンドウを作成
window = tk.Tk()
window.title('ERR_LOG Viewer')

# 更新ボタンを作成
def update_treeview():
    load_data()

update_button = tk.Button(window, text='更新', command=update_treeview)
# 更新ボタンを左下に配置
update_button.pack(side='bottom', anchor='sw')  # ボタンを左下 (southwest) に配置

# ツリービューを作成してヘッダーを設定
tree = ttk.Treeview(window, columns=('Timestamp', 'Event Type', 'Additional Info'), show='headings')
tree.heading('Timestamp', text='Report_time', command=lambda col='Timestamp': sort_column(tree, col, False))
tree.heading('Event Type', text='Event Type', command=lambda col='Event Type': sort_column(tree, col, False))
tree.heading('Additional Info', text='Server_Info', command=lambda col='Additional Info': sort_column(tree, col, False))
tree.pack(fill='both', expand=True)  # ツリービューをウィンドウにフィットさせる

# ツリービューの 'Additional Info' 列にスクロールバーを追加
vsb = ttk.Scrollbar(window, orient='vertical', command=tree.yview)
vsb.pack(side='right', fill='y')
tree.configure(yscrollcommand=vsb.set)

# 列の幅を設定
tree.column('Timestamp', width=130)  # 幅130ピクセル
tree.column('Event Type', width=80)  # 幅 80ピクセル
tree.column('Additional Info', width=600)  # 幅600ピクセル

# データベースからデータを取得して表示
def load_data():
    cursor.execute('SELECT timestamp, event_type, additional_info FROM logs')
    data = cursor.fetchall()
    
    # ツリービューをクリア
    for item in tree.get_children():
        tree.delete(item)
    
    # 新しいデータを挿入
    for row in data:
        tree.insert('', 'end', values=row)

load_data()  # 初回のデータ読み込み

# 列のソート関数を定義
def sort_column(tv, col, reverse):
    l = [(tv.set(k, col), k) for k in tv.get_children('')]
    l.sort(reverse=reverse)
    for index, (val, k) in enumerate(l):
        tv.move(k, '', index)
    tv.heading(col, command=lambda col=col: sort_column(tv, col, not reverse))

# メインループを開始
window.mainloop()

# データベース接続を閉じる
conn.close()

コメント
  • X
  • Facebookでシェアする
  • はてなブックマークに追加する
  • LINEでシェアする

Sqlite3でログをシコシコ(2.7))

2023年09月05日 | python?

import sqlite3

# SQLiteデータベースに接続
conn = sqlite3.connect('log_data.db')
cursor = conn.cursor()

# データベースにテーブルを作成(既に作成済みの場合はスキップ)
cursor.execute('''
    CREATE TABLE IF NOT EXISTS logs (
        id INTEGER PRIMARY KEY,
        timestamp DATETIME,
        event_type TEXT,
        additional_info TEXT
    )
''')

# テキストファイルからログデータを読み取り、データベースに挿入(重複を避ける)
with open('server_logs.txt', 'r') as file:
    for line in file:
        data = line.strip().split(' ')
        if len(data) >= 3:
            timestamp = data[0] + ' ' + data[1]
            event_type = data[2]
            additional_info = ' '.join(data[3:]) if len(data) > 3 else ''

            # 重複をチェックするためのクエリ
            cursor.execute('SELECT id FROM logs WHERE timestamp = ? AND event_type = ? AND additional_info = ?', (timestamp, event_type, additional_info))
            existing_data = cursor.fetchone()

            if not existing_data:
                # 重複がない場合のみ挿入
                cursor.execute('INSERT INTO logs (timestamp, event_type, additional_info) VALUES (?, ?, ?)', (timestamp, event_type, additional_info))

conn.commit()
conn.close()

コメント
  • X
  • Facebookでシェアする
  • はてなブックマークに追加する
  • LINEでシェアする