Pythonファイルの操作と例
1.ファイル操作
2.補助機能
わりあてほうしき
意味
os.listdir(“E:”)
Eディスクディレクトリの下にあるすべてのファイルとディレクトリを返します.
os.remove(“E:\a.txt”)
Eディスクディレクトリのa.txtファイルを削除
os.removedirs(“E:\dir”)
Eディスクディレクトリの下にあるdirディレクトリNoteを削除する:dirディレクトリの下にファイルとフォルダが存在しない
os.path.isfile(“E:\dir”)
パスがファイルかどうかを確認します.はい、Trueを返します.そうでなければFalseを返します.
os.path.isdir(“E:\dir”)
パスがフォルダかどうかを確認します.そうでなければTrueを返します.そうでなければFalseを返します.
os.path.isabs(“E:\dir”)
絶対パスかどうかを確認します.はい、Trueを返します.そうでなければFalseを返します.
os.path.exists(“E:\dir”)
パスが存在するかどうかを確認します.はい、Trueを返します.そうでなければFalseを返します.
os.path.split(“E:\dir\a.txt”)
パスをカットして、例を返します(‘E:dir’,‘a.txt’)
os.path.splitext(“E:\dir\a.txt”)
ファイル名とファイルタイプを分けて、例を返します(‘E:dira’,‘.txt’)Note:パスがフォルダの場合、タイプは空です
os.path.dirname(“E:\dir\a.txt”)
現在のパスの親ディレクトリパスの取得
os.path.basename(“E:\dir\a.txt”)
現在のパスのファイル名またはフォルダ名を取得
os.system(“dir”)
shellを実行し、組み込み命令を実行し、例は現在の実行パスの下のファイルとフォルダを返します.
os.getenv(“JAVA_HOME”)
環境変数を取得し、変数名を入力し、環境変数のパスを返します.
os.putenv(“TEST”, “E:\”)
環境変数の設定
os.name
プラットフォーム名を取得windowsは“nt”を返し、Linuxは“posix”を返します
os.mkdir(“E:\dir”)
パスを指定してフォルダを作成
os.mkdirs(“E:\dir\subdir”)
パスを指定してマルチレベルフォルダを作成
os.rmdir(“E:\dir”)
空のディレクトリのみ削除できます
os.chdir(“E:\dir”)
パスをE:dirに切り替え
os.stat(“E:\a.txt”)
ファイルのプロパティの取得
os.chmod(“E:\a.txt”, stat.S_IXOTH)
ファイルまたはディレクトリの権限を変更します.例はa.txtの権限を変更して他のユーザーに実行権限を与えることです.
os.path.getsize(“E:\a.txt”)
ファイルサイズをバイト単位で取得
shutil.copy(“oldfile”, “newfile”)
oldfileはフォルダのみ、newfileはファイルまたはフォルダ
shutil.copyfile(“oldfile”, “newfile”)
oldfileもnewfileもファイルのみ
shutil.copytree(“olddir”, “newdir”)
oldfileとnewfileはフォルダのみであり、newfileは存在しない必要があります.
shutil.move(“oldpos”, “newpos”)
ファイルまたはフォルダの移動
shutil.rmtree(“dir”)
ディレクトリが空であるかどうかにかかわらず、削除できます.
3.ファイルを開く
開く
意味
r
読み方
w
書き方
a
追加方式では、存在しない場合に自動的にファイルが作成されます
r+
読み書き方法、rを参照
w+
読み書き、wを参照
a+
読み書き方法、aを参照
rb
バイナリ読み出し、rを参照
wb
バイナリ書き込み、wを参照
ab
バイナリ追加方式、a参照
rb+
バイナリ読み書き方式、r+を参照
wb+
バイナリ読み書き方式、w+を参照
ab+
バイナリ読み書き方式、a+を参照
4.ファイルを読む
読み方
意味
fp.read(size)
sizeは読み込む長さで、単位はバイトです
fp.readline()/fp.readline(size)
1行のデータを読み、sizeが入力された場合、1行の一部を返す可能性があります.
fp.readlines()/fp.readlines(size)
ファイルの各動作listのメンバーはlistを返し、内部もreadline()を呼び出し、sizeが入力されるとコンテンツの総長を表し、ファイルの一部のみが読み出されます.
5.書類を書く
書き方
意味
fp.write(str)
strは書き込むデータであり、write()はstrの後ろに改行文字を自動的に追加しません.
fp.writelines(seq)
seqコンテンツをファイルに書き込んでも、各行の後ろに何も追加されません.
6.書類補助
ほじょモード
意味
fp.flush()
バッファの内容をディスクに書き込む
fp.fileno()
ロングフォームのファイルラベルを返します
fp.isatty()
Linuxシステムで減産ファイルが端末デバイスファイルであるかどうか
fp.tell()
ファイル操作の現在の位置を返し、ファイルの先頭を起点とします.
fp.next()
次の行に戻り、ファイル操作フラグを次の行に移動し、for...in fileのような文にfileを使用すると、next()関数を呼び出して遍歴を実現します.
fp.seek(off, whence)
ファイルをoff位置にオフセットし、offが正であれば後オフセット、負であれば前オフセットwhenceはどこからオフセットを計算するかを表し、0:先頭から、1:現在位置から、2:ファイル末尾から
fp.truncate(size)
ファイルをsizeサイズに切り抜き、デフォルトでは現在の位置に切り抜きます.sizeがファイルのサイズより大きい場合は、ファイルを変更しないか、0でファイルを対応するサイズに補うか、ランダムな内容を追加するかのいずれかです.
7.ファイル操作例
, , , . , ... .
2.補助機能
os shutil .
わりあてほうしき
意味
os.listdir(“E:”)
Eディスクディレクトリの下にあるすべてのファイルとディレクトリを返します.
os.remove(“E:\a.txt”)
Eディスクディレクトリのa.txtファイルを削除
os.removedirs(“E:\dir”)
Eディスクディレクトリの下にあるdirディレクトリNoteを削除する:dirディレクトリの下にファイルとフォルダが存在しない
os.path.isfile(“E:\dir”)
パスがファイルかどうかを確認します.はい、Trueを返します.そうでなければFalseを返します.
os.path.isdir(“E:\dir”)
パスがフォルダかどうかを確認します.そうでなければTrueを返します.そうでなければFalseを返します.
os.path.isabs(“E:\dir”)
絶対パスかどうかを確認します.はい、Trueを返します.そうでなければFalseを返します.
os.path.exists(“E:\dir”)
パスが存在するかどうかを確認します.はい、Trueを返します.そうでなければFalseを返します.
os.path.split(“E:\dir\a.txt”)
パスをカットして、例を返します(‘E:dir’,‘a.txt’)
os.path.splitext(“E:\dir\a.txt”)
ファイル名とファイルタイプを分けて、例を返します(‘E:dira’,‘.txt’)Note:パスがフォルダの場合、タイプは空です
os.path.dirname(“E:\dir\a.txt”)
現在のパスの親ディレクトリパスの取得
os.path.basename(“E:\dir\a.txt”)
現在のパスのファイル名またはフォルダ名を取得
os.system(“dir”)
shellを実行し、組み込み命令を実行し、例は現在の実行パスの下のファイルとフォルダを返します.
os.getenv(“JAVA_HOME”)
環境変数を取得し、変数名を入力し、環境変数のパスを返します.
os.putenv(“TEST”, “E:\”)
環境変数の設定
os.name
プラットフォーム名を取得windowsは“nt”を返し、Linuxは“posix”を返します
os.mkdir(“E:\dir”)
パスを指定してフォルダを作成
os.mkdirs(“E:\dir\subdir”)
パスを指定してマルチレベルフォルダを作成
os.rmdir(“E:\dir”)
空のディレクトリのみ削除できます
os.chdir(“E:\dir”)
パスをE:dirに切り替え
os.stat(“E:\a.txt”)
ファイルのプロパティの取得
os.chmod(“E:\a.txt”, stat.S_IXOTH)
ファイルまたはディレクトリの権限を変更します.例はa.txtの権限を変更して他のユーザーに実行権限を与えることです.
os.path.getsize(“E:\a.txt”)
ファイルサイズをバイト単位で取得
shutil.copy(“oldfile”, “newfile”)
oldfileはフォルダのみ、newfileはファイルまたはフォルダ
shutil.copyfile(“oldfile”, “newfile”)
oldfileもnewfileもファイルのみ
shutil.copytree(“olddir”, “newdir”)
oldfileとnewfileはフォルダのみであり、newfileは存在しない必要があります.
shutil.move(“oldpos”, “newpos”)
ファイルまたはフォルダの移動
shutil.rmtree(“dir”)
ディレクトリが空であるかどうかにかかわらず、削除できます.
3.ファイルを開く
fp = open("E:\\a.txt", "r") // a.txt
開く
意味
r
読み方
w
書き方
a
追加方式では、存在しない場合に自動的にファイルが作成されます
r+
読み書き方法、rを参照
w+
読み書き、wを参照
a+
読み書き方法、aを参照
rb
バイナリ読み出し、rを参照
wb
バイナリ書き込み、wを参照
ab
バイナリ追加方式、a参照
rb+
バイナリ読み書き方式、r+を参照
wb+
バイナリ読み書き方式、w+を参照
ab+
バイナリ読み書き方式、a+を参照
4.ファイルを読む
読み方
意味
fp.read(size)
sizeは読み込む長さで、単位はバイトです
fp.readline()/fp.readline(size)
1行のデータを読み、sizeが入力された場合、1行の一部を返す可能性があります.
fp.readlines()/fp.readlines(size)
ファイルの各動作listのメンバーはlistを返し、内部もreadline()を呼び出し、sizeが入力されるとコンテンツの総長を表し、ファイルの一部のみが読み出されます.
5.書類を書く
書き方
意味
fp.write(str)
strは書き込むデータであり、write()はstrの後ろに改行文字を自動的に追加しません.
fp.writelines(seq)
seqコンテンツをファイルに書き込んでも、各行の後ろに何も追加されません.
6.書類補助
ほじょモード
意味
fp.flush()
バッファの内容をディスクに書き込む
fp.fileno()
ロングフォームのファイルラベルを返します
fp.isatty()
Linuxシステムで減産ファイルが端末デバイスファイルであるかどうか
fp.tell()
ファイル操作の現在の位置を返し、ファイルの先頭を起点とします.
fp.next()
次の行に戻り、ファイル操作フラグを次の行に移動し、for...in fileのような文にfileを使用すると、next()関数を呼び出して遍歴を実現します.
fp.seek(off, whence)
ファイルをoff位置にオフセットし、offが正であれば後オフセット、負であれば前オフセットwhenceはどこからオフセットを計算するかを表し、0:先頭から、1:現在位置から、2:ファイル末尾から
fp.truncate(size)
ファイルをsizeサイズに切り抜き、デフォルトでは現在の位置に切り抜きます.sizeがファイルのサイズより大きい場合は、ファイルを変更しないか、0でファイルを対応するサイズに補うか、ランダムな内容を追加するかのいずれかです.
7.ファイル操作例
,
# V1.0
# Author: Hui.Hanghang
# Date: 2019.01.22
import os
fileDir = os.getcwd()
filePath = fileDir + "\\log.txt"
print(filePath)
file_Info_Size = (0x04 + 0x04 + 0x04 + 0xC80)*2
def analyze_mf(content):
print("**************************** MF Info Start ****************************")
off = 0
print("MF/DF/EF Common_Domain")
head_Array = [4, 2, 2, 2, 8]
head_Fid = content[off:(off+head_Array[0])]; off += head_Array[0]
head_Num = content[off:(off+head_Array[1])]; off += head_Array[1]
head_Class = content[off:(off+head_Array[2])]; off += head_Array[2]
head_Ac = content[off:(off+head_Array[3])]; off += head_Array[3]
head_OemId = content[off:(off+head_Array[4])]; off += head_Array[4]
print("
head_Fid = %s
head_Num = %s
head_Class = %s
head_Ac = %s
head_OemId = %s
" \
%(head_Fid, head_Num, head_Class, head_Ac, head_OemId) )
print("MF Private_Domain")
mf_Array = [128, 128, 32, 64, 64, 4, 4, 8, 8, 8, 8]
mf_Manufacturer = content[off:(off+mf_Array[ 0])]; off += mf_Array[ 0]
mf_Issuer = content[off:(off+mf_Array[ 1])]; off += mf_Array[ 1]
mf_Model = content[off:(off+mf_Array[ 2])]; off += mf_Array[ 2]
mf_Label = content[off:(off+mf_Array[ 3])]; off += mf_Array[ 3]
mf_SerialNumber = content[off:(off+mf_Array[ 4])]; off += mf_Array[ 4]
mf_HwVersion = content[off:(off+mf_Array[ 5])]; off += mf_Array[ 5]
mf_FirmwareVersion = content[off:(off+mf_Array[ 6])]; off += mf_Array[ 6]
mf_AlgSymCap = content[off:(off+mf_Array[ 7])]; off += mf_Array[ 7]
mf_AlgAsymCap = content[off:(off+mf_Array[ 8])]; off += mf_Array[ 8]
mf_AlgHashCap = content[off:(off+mf_Array[ 9])]; off += mf_Array[ 9]
mf_DevAuthAlgId = content[off:(off+mf_Array[10])]; off += mf_Array[10]
print("
mf_Manufacturer = %s
mf_Issuer = %s
mf_Model = %s
mf_Label = %s
mf_SerialNumber = %s
mf_HwVersion = %s
mf_FirmwareVersion = %s
mf_AlgSymCap = %s
mf_AlgAsymCap = %s
mf_AlgHashCap = %s
mf_DevAuthAlgId = %s
" \
%(mf_Manufacturer, mf_Issuer, mf_Model, mf_Label, mf_SerialNumber, mf_HwVersion, mf_FirmwareVersion, mf_AlgSymCap, mf_AlgAsymCap, mf_AlgHashCap, mf_DevAuthAlgId) )
print("MF Key_Domain---SM4")
mf_Sm4_Array = [32, 32, 32, 32]
mf_Sm4_Dev_Auth = content[off:(off+mf_Sm4_Array[0])]; off += mf_Sm4_Array[0]
mf_Sm4_App_Init = content[off:(off+mf_Sm4_Array[1])]; off += mf_Sm4_Array[1]
mf_Sm4_Boot = content[off:(off+mf_Sm4_Array[2])]; off += mf_Sm4_Array[2]
mf_Sm4_Transfer = content[off:(off+mf_Sm4_Array[3])]; off += mf_Sm4_Array[3]
print("
mf_Sm4_Dev_Auth = %s
mf_Sm4_App_Init = %s
mf_Sm4_Boot = %s
mf_Sm4_Transfer = %s
" \
%(mf_Sm4_Dev_Auth, mf_Sm4_App_Init, mf_Sm4_Boot, mf_Sm4_Transfer) )
print("MF Key_Domain---RSA_1024")
mf_Rsa_1024_Array = [1416]
mf_Rsa_1024 = content[off:(off+mf_Rsa_1024_Array[0])]; off += mf_Rsa_1024_Array[0]
print("
mf_Rsa_1024 = %s
" %(mf_Rsa_1024))
print("MF Key_Domain---SM2")
mf_Sm2_Array = [192]
mf_Sm2 = content[off:(off+mf_Sm2_Array[0])]; off += mf_Sm2_Array[0]
print("
mf_Sm2 = %s
" %(mf_Sm2))
print("**************************** MF Info End ****************************")
def analyze_df(content):
print("**************************** DF Info Start ****************************")
off = 0
print("MF/DF/EF Common_Domain")
head_Array = [4, 2, 2, 2, 8]
head_Fid = content[off:(off+head_Array[0])]; off += head_Array[0]
head_Num = content[off:(off+head_Array[1])]; off += head_Array[1]
head_Class = content[off:(off+head_Array[2])]; off += head_Array[2]
head_Ac = content[off:(off+head_Array[3])]; off += head_Array[3]
head_OemId = content[off:(off+head_Array[4])]; off += head_Array[4]
print("
head_Fid = %s
head_Num = %s
head_Class = %s
head_Ac = %s
head_OemId = %s
" \
%(head_Fid, head_Num, head_Class, head_Ac, head_OemId) )
print("DF Private_Domain")
df_Array = [64, 64, 8, 2, 2, 64, 8, 2, 2, 2, 2, 2, 8]
df_ApplicationName = content[off:(off+df_Array[ 0])]; off += df_Array[ 0]
df_AdmainPin = content[off:(off+df_Array[ 1])]; off += df_Array[ 1]
df_AdmainPinRetryCount = content[off:(off+df_Array[ 2])]; off += df_Array[ 2]
df_MinAdmainPinLen = content[off:(off+df_Array[ 3])]; off += df_Array[ 3]
df_MaxAdmainPinLen = content[off:(off+df_Array[ 4])]; off += df_Array[ 4]
df_UserPin = content[off:(off+df_Array[ 5])]; off += df_Array[ 5]
df_UserPinRetryCount = content[off:(off+df_Array[ 6])]; off += df_Array[ 6]
df_MinUserPinLen = content[off:(off+df_Array[ 7])]; off += df_Array[ 7]
df_MaxUserPinLen = content[off:(off+df_Array[ 8])]; off += df_Array[ 8]
df_RsaNum = content[off:(off+df_Array[ 9])]; off += df_Array[ 9]
df_Sm2Num = content[off:(off+df_Array[10])]; off += df_Array[10]
df_SymNum = content[off:(off+df_Array[11])]; off += df_Array[11]
df_AlgFlags = content[off:(off+df_Array[12])]; off += df_Array[12]
print("
df_ApplicationName = %s
df_AdmainPin = %s
df_AdmainPinRetryCount = %s
df_MinAdmainPinLen = %s
df_MaxAdmainPinLen = %s
df_UserPin = %s
df_UserPinRetryCount = %s
df_MinUserPinLen = %s
df_MaxUserPinLen = %s
df_RsaNum = %s
df_Sm2Num = %s
df_SymNum = %s
df_AlgFlags = %s
" \
%(df_ApplicationName, df_AdmainPin, df_AdmainPinRetryCount, df_MinAdmainPinLen, df_MaxAdmainPinLen, df_UserPin, df_UserPinRetryCount, df_MinUserPinLen, df_MaxUserPinLen, df_RsaNum, df_Sm2Num, df_SymNum, df_AlgFlags) )
print("DF TokenFlag_Domain")
df_TokenFlag_Array = [8]
df_TokenFlag = content[off:(off+df_TokenFlag_Array[0])]; off += df_TokenFlag_Array[0]
print("
df_TokenFlag = %s
" %(df_TokenFlag))
print("DF PinCurrentRetryCount_Domain")
df_PinCurrentRetryCount_Array = [8, 8]
df_AdmainPinCurrentRetryCount = content[off:(off+df_PinCurrentRetryCount_Array[0])]; off += df_PinCurrentRetryCount_Array[0]
df_UserPinCurrentRetryCount = content[off:(off+df_PinCurrentRetryCount_Array[1])]; off += df_PinCurrentRetryCount_Array[1]
print("
df_AdmainPinCurrentRetryCount = %s
df_UserPinCurrentRetryCount = %s
" \
%(df_AdmainPinCurrentRetryCount, df_UserPinCurrentRetryCount) )
print("DF Key_Domain---SM4")
df_Sm4_Array = [32, 32]
df_Sm4_Key_00 = content[off:(off+df_Sm4_Array[0])]; off += df_Sm4_Array[0]
df_Sm4_Key_01 = content[off:(off+df_Sm4_Array[1])]; off += df_Sm4_Array[1]
print("
df_Sm4_Key_00 = %s
df_Sm4_Key_01 = %s
" \
%(df_Sm4_Key_00, df_Sm4_Key_01) )
print("DF Key_Domain---RSA_1024")
df_Rsa_1024_Array = [1416]
df_Rsa_1024 = content[off:(off+df_Rsa_1024_Array[0])]; off += df_Rsa_1024_Array[0]
print("
df_Rsa_1024 = %s
" %(df_Rsa_1024))
print("DF Key_Domain---SM2")
df_Sm2_Array = [192, 192, 192, 192, 192, 192, 192, 192, 192, 192, 192, 192]
df_Sm2_00 = content[off:(off+df_Sm2_Array[ 0])]; off += df_Sm2_Array[ 0]
df_Sm2_01 = content[off:(off+df_Sm2_Array[ 1])]; off += df_Sm2_Array[ 1]
df_Sm2_02 = content[off:(off+df_Sm2_Array[ 2])]; off += df_Sm2_Array[ 2]
df_Sm2_03 = content[off:(off+df_Sm2_Array[ 3])]; off += df_Sm2_Array[ 3]
df_Sm2_04 = content[off:(off+df_Sm2_Array[ 4])]; off += df_Sm2_Array[ 4]
df_Sm2_05 = content[off:(off+df_Sm2_Array[ 5])]; off += df_Sm2_Array[ 5]
df_Sm2_06 = content[off:(off+df_Sm2_Array[ 6])]; off += df_Sm2_Array[ 6]
df_Sm2_07 = content[off:(off+df_Sm2_Array[ 7])]; off += df_Sm2_Array[ 7]
df_Sm2_08 = content[off:(off+df_Sm2_Array[ 8])]; off += df_Sm2_Array[ 8]
df_Sm2_09 = content[off:(off+df_Sm2_Array[ 9])]; off += df_Sm2_Array[ 9]
df_Sm2_0A = content[off:(off+df_Sm2_Array[10])]; off += df_Sm2_Array[10]
df_Sm2_0B = content[off:(off+df_Sm2_Array[11])]; off += df_Sm2_Array[11]
print("
df_Sm2_00 = %s
df_Sm2_01 = %s
df_Sm2_02 = %s
df_Sm2_03 = %s
df_Sm2_04 = %s
df_Sm2_05 = %s
df_Sm2_06 = %s
df_Sm2_07 = %s
df_Sm2_08 = %s
df_Sm2_09 = %s
df_Sm2_0A = %s
df_Sm2_0B = %s
" \
%(df_Sm2_00, df_Sm2_01, df_Sm2_02, df_Sm2_03, df_Sm2_04, df_Sm2_05, df_Sm2_06, df_Sm2_07, df_Sm2_08, df_Sm2_09, df_Sm2_0A, df_Sm2_0B) )
print("DF Key_Domain---RSA_2048")
df_Rsa_2048_Array = [2826, 2826, 2826, 2826, 2826,2826, 2826, 2826, 2826, 2826, 2826, 2826, 2826]
df_Rsa_2048_00 = content[off:(off+df_Rsa_2048_Array[ 0])]; off += df_Rsa_2048_Array[ 0]
df_Rsa_2048_01 = content[off:(off+df_Rsa_2048_Array[ 1])]; off += df_Rsa_2048_Array[ 1]
df_Rsa_2048_02 = content[off:(off+df_Rsa_2048_Array[ 2])]; off += df_Rsa_2048_Array[ 2]
df_Rsa_2048_03 = content[off:(off+df_Rsa_2048_Array[ 3])]; off += df_Rsa_2048_Array[ 3]
df_Rsa_2048_04 = content[off:(off+df_Rsa_2048_Array[ 4])]; off += df_Rsa_2048_Array[ 4]
df_Rsa_2048_05 = content[off:(off+df_Rsa_2048_Array[ 5])]; off += df_Rsa_2048_Array[ 5]
df_Rsa_2048_06 = content[off:(off+df_Rsa_2048_Array[ 6])]; off += df_Rsa_2048_Array[ 6]
df_Rsa_2048_07 = content[off:(off+df_Rsa_2048_Array[ 7])]; off += df_Rsa_2048_Array[ 7]
df_Rsa_2048_08 = content[off:(off+df_Rsa_2048_Array[ 8])]; off += df_Rsa_2048_Array[ 8]
df_Rsa_2048_09 = content[off:(off+df_Rsa_2048_Array[ 9])]; off += df_Rsa_2048_Array[ 9]
df_Rsa_2048_0A = content[off:(off+df_Rsa_2048_Array[10])]; off += df_Rsa_2048_Array[10]
df_Rsa_2048_0B = content[off:(off+df_Rsa_2048_Array[11])]; off += df_Rsa_2048_Array[11]
df_Rsa_2048_0C = content[off:(off+df_Rsa_2048_Array[12])]; off += df_Rsa_2048_Array[12]
print("
df_Rsa_2048_00 = %s
df_Rsa_2048_01 = %s
df_Rsa_2048_02 = %s
df_Rsa_2048_03 = %s
df_Rsa_2048_04 = %s
df_Rsa_2048_05 = %s
df_Rsa_2048_06 = %s
df_Rsa_2048_07 = %s
df_Rsa_2048_08 = %s
df_Rsa_2048_09 = %s
df_Rsa_2048_0A = %s
df_Rsa_2048_0B = %s
df_Rsa_2048_0C = %s
" \
%(df_Rsa_2048_00, df_Rsa_2048_01, df_Rsa_2048_02, df_Rsa_2048_03, df_Rsa_2048_04, df_Rsa_2048_05, df_Rsa_2048_06, df_Rsa_2048_07, df_Rsa_2048_08, df_Rsa_2048_09, df_Rsa_2048_0A, df_Rsa_2048_0B, df_Rsa_2048_0C) )
print("**************************** DF Info End ****************************")
def analyze_ef(content, father_Aid):
print("**************************** EF Info Start ****************************")
off = 0
print("Current_EF belongs to Father_DF: " + father_Aid)
print("MF/DF/EF Common_Domain")
head_Array = [4, 2, 2, 2, 8]
head_Fid = content[off:(off+head_Array[0])]; off += head_Array[0]
head_Num = content[off:(off+head_Array[1])]; off += head_Array[1]
head_Class = content[off:(off+head_Array[2])]; off += head_Array[2]
head_Ac = content[off:(off+head_Array[3])]; off += head_Array[3]
head_OemId = content[off:(off+head_Array[4])]; off += head_Array[4]
print("
head_Fid = %s
head_Num = %s
head_Class = %s
head_Ac = %s
head_OemId = %s
" \
%(head_Fid, head_Num, head_Class, head_Ac, head_OemId) )
print("EF Private_Domain")
ef_Array = [64]
ef_FileName = content[off:(off+ef_Array[0])]; off += ef_Array[0]
print("
ef_FileName = %s
" %(ef_FileName))
print("EF Content")
ef_Content = content[off:]
print("
ef_Content = %s
" %(ef_Content))
print("**************************** EF Info End ****************************")
def display_file_Info():
print("**************************** Display_File_Num Start ****************************")
fp = open(filePath, 'r')
content = fp.read(file_Info_Size)
file_num = 0
file_size = []
file_off = []
off = 0
print("FileSystem Base Info")
fileSystem_Array = [8, 8, 8]
current_State = content[off:(off+fileSystem_Array[0])]; off += fileSystem_Array[0]
used_Memory = content[off:(off+fileSystem_Array[1])]; off += fileSystem_Array[1]
remain_Memory = content[off:(off+fileSystem_Array[2])]; off += fileSystem_Array[2]
print("
current_State = %s
used_Memory = %s
remain_Memory = %s
" \
%(current_State, used_Memory, remain_Memory) )
print("FileSystem Offset Info")
print ("Fid Type Exist Level Total_Size Used_Size Addr_Offset Father_Fid Father_Aid Aid")
for i in range(38):
offset_Array = [4, 2, 2, 2, 8, 8, 8, 4, 64, 64]
fid = content[off:(off+offset_Array[0])]; off += offset_Array[0]
type = content[off:(off+offset_Array[1])]; off += offset_Array[1]
exist = content[off:(off+offset_Array[2])]; off += offset_Array[2]
level = content[off:(off+offset_Array[3])]; off += offset_Array[3]
total_size = content[off:(off+offset_Array[4])]; off += offset_Array[4]
used_size = content[off:(off+offset_Array[5])]; off += offset_Array[5]
addr_offset = content[off:(off+offset_Array[6])]; off += offset_Array[6]
father_fid = content[off:(off+offset_Array[7])]; off += offset_Array[7]
father_aid = content[off:(off+offset_Array[8])]; off += offset_Array[8]
aid = content[off:(off+offset_Array[9])]; off += offset_Array[9]
#print("%s %s %s %s %s %s %s %s %s %s" %(fid, type, exist, level, total_size, used_size, addr_offset, father_fid, father_aid, aid))
if ( (exist == "01") and (fid != "FFFF") ):
print("%s %s %s %s %s %s %s %s %s %s" %(fid, type, exist, level, total_size, used_size, addr_offset, father_fid, father_aid, aid))
file_num += 1
file_size.append(int(total_size, 16))
file_off.append(int(addr_offset, 16))
print("FileSystem Detail Info")
print("file_num = %d
" %file_num)
for i in range(file_num):
print("file_size[%.2d] = 0x%.8x, file_off[%.2d] = 0x%.8x" %(i, file_size[i], i, file_off[i]))
fp.close()
print("**************************** Display_File_Num End ****************************")
def main():
display_file_Info()
print ("
****************************** Start Analyze ******************************
")
with open(filePath, 'r') as fp:
fp.read(24)
for i in range(38):
off = 0
content = fp.read(166)
offset_Array = [4, 2, 2, 2, 8, 8, 8, 4, 64, 64]
fid = content[off:(off+offset_Array[0])]; off += offset_Array[0]
type = content[off:(off+offset_Array[1])]; off += offset_Array[1]
exist = content[off:(off+offset_Array[2])]; off += offset_Array[2]
level = content[off:(off+offset_Array[3])]; off += offset_Array[3]
total_size = content[off:(off+offset_Array[4])]; off += offset_Array[4]
used_size = content[off:(off+offset_Array[5])]; off += offset_Array[5]
addr_offset = content[off:(off+offset_Array[6])]; off += offset_Array[6]
father_fid = content[off:(off+offset_Array[7])]; off += offset_Array[7]
father_aid = content[off:(off+offset_Array[8])]; off += offset_Array[8]
aid = content[off:(off+offset_Array[9])]; off += offset_Array[9]
if ( (exist == "01") and (fid != "FFFF") ):
fp.seek(file_Info_Size+int(addr_offset, 16)*2,0)
file_content = fp.read(int(total_size, 16)*2)
if type == "00":
analyze_mf(file_content)
elif type == "01":
analyze_df(file_content)
elif type == "02":
analyze_ef(file_content, father_aid)
else:
raise "File Type Error"
fp.seek(24 + (i+1)*166, 0)
print ("
****************************** End Analyze ******************************
")
if __name__ == "__main__":
main()