我需要读取 AFP 文件并提取它的 TLE,例如帐号、客户全名…… AFP 文件格式正确,结构非常清晰。我不想添加任何外部库。
问问题
480 次
2 回答
0
它是用 Python 编写的,我很久以前就写过它,从那以后就再也没有碰过它,但它确实有效。我会添加一些评论,但我不记得关于它的任何事情。可能有点用。
import datetime
start = datetime.datetime.now()
statementlist=[]
ptxlist = []
with open('C:\\temp\\AFP\\bigfile', 'rb') as fs:
bngcmd = b'\xA8\xAD'
engcmd = b'\xA9\xAD'
ptxcmd = b'\xEE\x9B'
tlecmd = b'\xA0\x90'
inDoc = False
while True:
# 'Read SFI header info
byte = fs.read(6)
if not byte:
break
# 'get command info
SFICommand = byte[4:6]
SFISize = (byte[1]<<8) + byte[2]
if not inDoc and SFICommand == bngcmd:
inDoc = True
ptx = bytearray()
fs.read(SFISize-5)
elif inDoc and SFICommand == engcmd:
inDoc = False
ptxlist.append(ptx)
currentsize = 0
fs.read(SFISize-5)
elif inDoc and SFICommand == ptxcmd:
fs.read(3)
ptx.extend(bytearray(fs.read(SFISize-8)))
else:
fs.read(SFISize-5)
inptxcmd = b'\x2B\xD3'
for ptx in ptxlist:
i = 0
ptxlength =len(ptx)
utfstring=''
while i < ptxlength:
if ptx[i:i+2] == inptxcmd:
i+=2
ptxsize = ptx[i]
ptxcmd = ptx[i+1]
if ptxcmd == 0xDA or ptxcmd == 0xDB:
utfstring += ptx[i+2:i+ptxsize].decode("EBCDIC-CP-BE").strip() + '\u0009'
i+=ptxsize
statementlist.append(utfstring + '\n')
with open('C:\\temp\\AFP\\pythonout.txt', 'w',encoding='ASCII') as outfile:
for statement in statementlist:
outfile.write(statement)
于 2020-08-03T18:43:11.850 回答
0
AFP 是一种简单的格式,它由结构化字段组成,您的第一步是对其进行解码,下载此:“混合对象文档内容架构参考”阅读前 50 页并编写代码将 afp 拆分为结构化字段,以便创建一个简单的转储您的文件。
好工作
于 2020-07-29T07:44:00.637 回答