[Python] 纯文本查看 复制代码
import os, io, subprocess
import matplotlib.pyplot as plt
MORSE = { 'A':'.-', 'B':'-...', 'C':'-.-.', 'D':'-..', 'E':'.', 'F':'..-.', 'G':'--.', 'H':'....', 'I':'..', 'J':'.---', 'K':'-.-', 'L':'.-..', 'M':'--', 'N':'-.', 'O':'---', 'P':'.--.', 'Q':'--.-', 'R':'.-.', 'S':'...', 'T':'-', 'U':'..-', 'V':'...-', 'W':'.--', 'X':'-..-', 'Y':'-.--', 'Z':'--..', '1':'.----', '2':'..---', '3':'...--', '4':'....-', '5':'.....', '6':'-....', '7':'--...', '8':'---..', '9':'----.', '0':'-----', ',':'--..--', '.':'.-.-.-', '?':'..--..', '/':'-..-.', '-':'-....-', '(':'-.--.', ')':'-.--.-', ':':'---...', ';':'-.-.-.', '=':'-...-', "'":'.----.', '!':'-.-.--', '_':'..--.-', '"':'.-..-.', '$':'...-..-', '&':'.-...', '@':'.--.-.', '+':'.-.-.'}
MORSE2 = {v:k for k, v in MORSE.items()}
morse_map = {'zip': '.', '7z': '-'}
# 先把压一压.zip内文件解压到f_path
f_path = r'E:\Software\附件'
temp_path = os.path.join(f_path, 'temp')
raw_data = ''
morse_data = ''
while True:
entries = sorted(os.listdir(f_path))
if not any(entry.endswith(('.zip', '.rar', '.7z')) for entry in entries):
break
with open(os.path.join(f_path, entries[1]), 'r') as f:
raw_pwd = f.readline().strip()
for i in '0123456789abcdef':
pwd = raw_pwd.replace('?', i)
# 'x'表示解压时保留文件原始目录,'-ibck'表示后台运行,'-y'表示所有提示自动确认
subprocess.run(f'winrar x -ibck -y -p{pwd} {f_path}\\{entries[0]} {temp_path}')
# 以returncode==0判断是否成功解压在极少数情况下会出错
if os.listdir(temp_path):
raw_data += i
morse_data += morse_map.get(entries[0].split('.')[-1], '/')
break
os.remove(os.path.join(f_path, entries[0]))
os.remove(os.path.join(f_path, entries[1]))
for item in os.listdir(temp_path):
# 重命名文件路径实现移动文件效果
os.rename(os.path.join(temp_path, item), os.path.join(f_path, item))
print(raw_data)
data = bytes.fromhex(raw_data.lstrip('f'))
plt.imshow(plt.imread(io.BytesIO(data)))
plt.axis('off')
plt.show()
print(morse_data)
answer = ('').join(MORSE2.get(s, '') for s in morse_data.split('/'))
print(answer)