16.08.2012, 00:06
|
#1
|
Ученый
Регистрация: 03.03.2010
Адрес: Сибирь, 58°14′00″ с. ш. 92°29′00″ в. д.
Сообщений: 288
Сказал(а) спасибо: 79
Поблагодарили 37 раз(а) в 14 сообщениях
|
конвертор файлов
есть небольшой код на питоне
Код:
def main():
import struct
import sys
import os
import shutil
if len(sys.argv) != 2:
print("Usage: " + sys.argv[0] + " res-file")
with open(sys.argv[1],'rb') as fin:
outdata = fin.read()
fin.close()
head = struct.unpack('iiii',outdata[:16])
if head[0] == 27058749:
print("Resource from russian version")
fmtstr1="iih"
fmtstr2="ii"
elif head[0] == 27058748:
print("Resource from english version")
fmtstr1="iiiih"
fmtstr2="i"
else:
print("Unknown version resource")
sys.exit(2)
print("Total objects:\t\t%d\nOffset to FATTable:\t%d\nSize of NameFAT:\t%d\n" % (head[1],head[2],head[3]))
x=0
ft=[]
marks1={}
marks2={}
mlist=[]
for i in range(head[1]):
FATEntry1 = struct.unpack_from(fmtstr1,outdata[head[2]+x:])
x = x + struct.calcsize(fmtstr1)
FATEntry2 = struct.unpack_from(fmtstr2,outdata[head[2]+x:])
x = x + struct.calcsize(fmtstr2)
#(filesize,name_len,file_offset,name_offset)
if head[0] == 27058749:
ft.append((FATEntry1[0],FATEntry1[1],FATEntry1[2],FATEntry2[0],FATEntry2[1]))
else:
ft.append((FATEntry1[0],FATEntry1[1],FATEntry1[4],FATEntry1[2],FATEntry2[0],FATEntry1[3]))
x=head[2]+x
try:
os.mkdir(sys.argv[1]+'_unp')
except:
pass
os.chdir(sys.argv[1]+'_unp')
for i in ft:
tfn = outdata[x+i[4]:x+i[4]+i[2]]
tpth = tfn.decode('utf-8').split('\\')
if len(tpth) > 1:
mkpth=''
for j in range(len(tpth)-1):
if mkpth == '':
mkpth = tpth[j]
else:
mkpth = mkpth+"\\"+tpth[j]
try:
os.mkdir(mkpth)
except:
pass
fout = open(tfn,'wb')
fout.write(outdata[i[3]:i[3]+i[1]])
if i[0] != -1:
if tfn in marks1:
print("Error")
else:
marks1[tfn] = i[0]
mlist.append(tfn)
if head[0] == 27058748:
marks2[tfn] = i[5]
fout.close()
os.chdir("..")
fout = open(sys.argv[1]+'_repacked','wb')
fout.write(struct.pack('i', 27058748))
fout.write(struct.pack('i', len(mlist)))
tf=[]
ofsft=16
nofs=0
for i in mlist:
with open(bytes(sys.argv[1] + "_unp",'utf-8') + b'\\' + i,'rb') as fin:
outdata = fin.read()
fin.close()
tf.append((outdata,i))
ofsft=ofsft+len(outdata)
fout.write(struct.pack('i', ofsft))
nft=b''
for i in tf:
nft=nft+i[1]
fout.write(struct.pack('i', len(nft)))
ft=b''
x=16
y=0
for i in tf:
fout.write(i[0])
tt=i[1]
if tt in marks1:
musv = marks1[tt]
else:
musv = -1
if tt in marks2:
musv2 = marks2[tt]
else:
musv2 = 0
ft=ft+struct.pack('i', musv)
ft=ft+struct.pack('i', len(i[0]))
ft=ft+struct.pack('i', x)
x=x+len(i[0])
ft=ft+struct.pack('i', musv2)
ft=ft+struct.pack('h', len(i[1]))
ft=ft+struct.pack('i', y)
y=y+len(i[1])
fout.write(ft)
fout.write(nft)
fout.close()
shutil.rmtree(sys.argv[1]+'_unp')
if __name__ == '__main__':
main()
есть несколько файлов с расширением *.res, слова человека
Цитата:
Так вот если взять и запустить на 3-ем питоне, да еще указать в качестве параметра файлы с расширением .res то на выходе получится что то нужно
|
вот теперь вопрос к гуру, как запустить? и как указать в параметре этот самый файл с расширением .res? просто я с питоном не когда дело не имел вообще, только впервые столкнулся с этим удавом (он же питон)
|
|
|