import os
import struct
p = os.getcwd()
# p = r"F:\temp"
File_list = os.listdir(p)
dirs = [os.path.join(p, x) for x in File_list]
type_dict = {
'504B0304': 'zip',
'52617221': 'rar',
'377ABCAF271C': '7z',
}
max_len = len(max(type_dict, key=len)) // 2
def get_filetype(filename):
# 读取二进制文件开头一定的长度
with open(filename, 'rb') as f:
byte = f.read(max_len)
# 解析为元组
byte_list = struct.unpack('B' * max_len, byte)
# 转为16进制
code = ''.join([('%X' % each).zfill(2) for each in byte_list])
# 根据标识符筛选判断文件格式
result = list(filter(lambda x: code.startswith(x), type_dict))
if result:
return type_dict[result[0]]
else:
return 'other'
def npZip(d, count):
if os.path.isdir(d):
dp = os.listdir(d)
po = [os.path.join(d, x) for x in dp]
password1 = os.path.basename(d)
count = 0
for file in dp:
flie_suffix = os.path.splitext(file)
if not os.path.isdir(po[count]):
oldname = d + "\\" + file
newname = d + "\\" + flie_suffix[0] + ".zip"
real_suffix = get_filetype(oldname)
print(real_suffix)
print(oldname)
print(newname)
if not real_suffix == 'other':
os.rename(oldname, newname)
cmd = 'bz.exe x -aoa -o:' + "\"" + d + "\"" + " -y -p:" + password1 + " " + "\"" + newname + "\"" + " >nul 2>nul"
ii = os.popen(cmd)
ii.close()
if ii:
os.remove(newname)
print(newname)
count += 1
if __name__ == '__main__':
for i in range(len(dirs)):
if os.path.isdir(dirs):
npZip(dirs, 0)
os.system("pause")
[/pre]