Python の tkinter を使って、バイナリビューアを作成しましたので公開します。
以下の環境で動作確認をしています。
環境: Windows 10、Python 3.x
背景
時々、音声データや画像データなどについて、バイナリでどうなっているか知りたくなることがあります。そこで、Python でバイナリービューアを作成しました。
これで任意のデータについて、バイナリで参照できるようになります。
使い方
① 任意のフォルダを作成し、その中に binary_viewer1.py 等の名前でテキストファイルを作成してください。
② ①のテキストファイルに下記のサンプルコードを貼りつけて保存してください。
③ ①のフォルダの中に “data1” という名前でフォルダを作成してください。このフォルダの中に任意のファイルを入れてください。
④ コマンドプロンプトから、②のファイルを実行してください。
まとめ
任意のファイルについて、Python でバイナリデータで参照できるようになりました。
ファイルフォーマットの仕様を調べていけば、バイナリデータも自由自在かなというところです。
ファイルが大きいと読み込みに時間がかかりますけれども。
関連リンク
・ 【tkinter】 フォルダビューアの作り方 【Python】
サンプルコード
import os
import glob
import tkinter as tk1
import tkinter.ttk as ttk1
def read_binary1( file1 ):
data1 = []
with open( file1, 'rb' ) as f1:
while True:
b1 = f1.read(1)
if not b1:
break
data1.append( b1 )
return data1
def show_binary1( file1 ):
bytes1 = read_binary1( file1 )
str1 = "0000"
str2 = ""
str3 = ""
for i1 in range( len( bytes1 ) ):
b1 = bytes1[i1]
str2 = str2 + b1.hex() + " "
chr1 = str( b1 ).split("'")[1]
if '\\' in chr1:
chr1 = "."
str3 = str3 + chr1
if (i1 % 16) == 15:
str1 = str1 + " " + str2 + " " + str3 + "\n" + "{:04d}".format( i1+1 )
str2 = ""
str3 = ""
elif (i1 % 8) == 7:
str2 = str2 + " "
str1 = str1 + " " + str2 + " "*(16 * 3 - len(str2)) + " " + str3 + "\n"
textbox2.delete( 1.0, tk1.END )
textbox2.insert( 1.0, str1 )
def show_file1( self ):
n1 = listbox1.curselection()
file1 = listbox1.get( n1[0] )
textbox1.delete( 0, tk1.END )
textbox1.insert( 0, file1 )
textbox2.insert( 1.0, "" )
file1 = path1 + file1
show_binary1( file1 )
return
path1 = os.path.dirname(__file__) + "\\data1\\"
list0 = glob.glob( path1 + "*.*" )
frame1 = tk1.Tk()
frame1.title( 'binary_viewer v0.1' )
frame1.geometry( "600x550+100+100" )
listbox1 = tk1.Listbox( frame1, selectmode = 'single' )
listbox1.place( x=10, y=10, width=260, height=100 )
scrollbar1 = tk1.Scrollbar( frame1, orient = 'v', command = listbox1.yview )
scrollbar1.place( x=270, y=10, height=100 )
listbox1.configure( yscrollcommand = scrollbar1.set )
for list1 in sorted( list0 ):
list2 = os.path.split( list1 )[1]
listbox1.insert('end', list2 )
listbox1.bind( '<<ListboxSelect>> ', show_file1 )
textbox1 = tk1.Entry( master=frame1 )
textbox1.place( x=300, y=10, width=260 )
textbox2 = tk1.Text( frame1, height=10 )
textbox2.place( x=10, y=120, width=550, height=400 )
scrollbar2 = ttk1.Scrollbar( frame1, orient = 'v', command = textbox2.yview )
textbox2.configure( yscrollcommand = scrollbar2.set )
scrollbar2.place( x=560, y=120, height=400 )
frame1.mainloop()