import re def parse_usb_data(file_path): normal_keys = {"04": "a", "05": "b", "06": "c", "07": "d", "08": "e", "09": "f", "0a": "g", "0b": "h", "0c": "i", "0d": "j", "0e": "k", "0f": "l", "10": "m", "11": "n", "12": "o", "13": "p", "14": "q", "15": "r", "16": "s", "17": "t", "18": "u", "19": "v", "1a": "w", "1b": "x", "1c": "y", "1d": "z", "1e": "1", "1f": "2", "20": "3", "21": "4", "22": "5", "23": "6", "24": "7", "25": "8", "26": "9", "27": "0", "28": "<RET>", "29": "<ESC>", "2a": "<DEL>", "2b": "\t", "2c": "<SPACE>", "2d": "-", "2e": "=", "2f": "[", "30": "]", "31": "\\", "32": "<NON>", "33": ";", "34": "'", "35": "<GA>", "36": ",", "37": ".", "38": "/", "39": "<CAP>", "3a": "<F1>", "3b": "<F2>", "3c": "<F3>", "3d": "<F4>", "3e": "<F5>", "3f": "<F6>", "40": "<F7>", "41": "<F8>", "42": "<F9>", "43": "<F10>", "44": "<F11>", "45": "<F12>"} shift_keys = {"04": "A", "05": "B", "06": "C", "07": "D", "08": "E", "09": "F", "0a": "G", "0b": "H", "0c": "I", "0d": "J", "0e": "K", "0f": "L", "10": "M", "11": "N", "12": "O", "13": "P", "14": "Q", "15": "R", "16": "S", "17": "T", "18": "U", "19": "V", "1a": "W", "1b": "X", "1c": "Y", "1d": "Z", "1e": "!", "1f": "@", "20": "#", "21": "$", "22": "%", "23": "^", "24": "&", "25": "*", "26": "(", "27": ")", "28": "<RET>", "29": "<ESC>", "2a": "<DEL>", "2b": "\t", "2c": "<SPACE>", "2d": "_", "2e": "+", "2f": "{", "30": "}", "31": "|", "32": "<NON>", "33": "\"", "34": ":", "35": "<GA>", "36": "<", "37": ">", "38": "?", "39": "<CAP>", "3a": "<F1>", "3b": "<F2>", "3c": "<F3>", "3d": "<F4>", "3e": "<F5>", "3f": "<F6>", "40": "<F7>", "41": "<F8>", "42": "<F9>", "43": "<F10>", "44": "<F11>", "45": "<F12>"} output = []
try: with open(file_path, 'r') as keys_file: lines = (line.strip() for line in keys_file) for line in lines: if not line or len(line) < 23: continue try: if line[0] != '0' or (line[1] != '0' and line[1] != '2') or line[3] != '0' or line[4] != '0' or line[9] != '0' or line[10] != '0' or line[12] != '0' or line[13] != '0' or line[15] != '0' or line[16] != '0' or line[18] != '0' or line[19] != '0' or line[21] != '0' or line[22] != '0' or line[6:8] == "00": continue if line[6:8] in normal_keys.keys(): output += [normal_keys[line[6:8]]] if line[1] == '0' else [shift_keys[line[6:8]]] else: output += ['[unknown]'] except: pass except FileNotFoundError: print("File not found!") return []
flag = 0 for i in range(len(output)): try: a = output.index('<DEL>') del output[a] del output[a - 1] except: pass for i in range(len(output)): try: if output[i] == "<CAP>": flag += 1 output.pop(i) if flag == 2: flag = 0 if flag != 0: output[i] = output[i].upper() except: pass return "".join(output)
def add_fenhao(file_path): output = []
with open(file_path, 'r') as file: for line in file: line = line.strip() if re.match('[a-fA-F0-9]{16}', line): formatted_line = ':'.join(line[i:i+2] for i in range(0, len(line), 2)) output.append(formatted_line) elif re.match('\S{2}:\S{2}:\S{2}:\S{2}:\S{2}:\S{2}:\S{2}:\S{2}', line): output.append(line) else: pass with open(file_path, 'w') as file: file.write('\n'.join(output)) return file_path
if __name__ == "__main__": file_path = add_fenhao(r"C:\Users\17333\Downloads\keyboard.txt") result = parse_usb_data(file_path) print("此文件的键盘映射如下\n", result)
|