Appearance
使用python转换脚本
在费了老大劲使用高级生物计算机(你的大脑)得到转换的”音符时机“文本后,就可以使用如下的python脚本,转换成KeymouseGo软件可以使用的脚本了,终于可以让脑子歇歇了。
暂且把这一步得到的文件称为“KeymouseGo乐谱脚本”吧。
注:如果您的不知道如何运行python程序的话,需自行安装python运行环境。
python转换脚本源码
python
import datetime
# 定义映射关系,h -high-高,m-middle-中,l-low-低
# 不区分大小写,h,m,l 同大写 H,M,L 一样
key_map = {
'h-1': 'Q', 'h-2': 'W', 'h-3': 'E', 'h-4': 'R', 'h-5': 'T', 'h-6': 'Y', 'h-7': 'U',
'm-1': 'A', 'm-2': 'S', 'm-3': 'D', 'm-4': 'F', 'm-5': 'G', 'm-6': 'H', 'm-7': 'J',
'l-1': 'Z', 'l-2': 'X', 'l-3': 'C', 'l-4': 'V', 'l-5': 'B', 'l-6': 'N', 'l-7': 'M'
}
# 文件路径
# music_filename = r'E:\GENSHINN IMPACT\python_script\\YZK-ALL.txt'
music_filename = r'E:\ai\test.txt'
# 读取文件并处理每一行
try:
with open(music_filename, 'r') as file:
lines = file.readlines()
except FileNotFoundError:
print(f"错误:文件 {music_filename} 不存在,请检查文件路径和文件名。\n")
except Exception as e:
print("打开文件时发生了其他错误,错误信息如下:\n")
print(e)
# 输出列表
transfer_lines = []
for line in lines:
# 去除空白字符
# line = line.strip()
# if not line: # 跳过空行
# continue
# 分割每行的数据
try:
first, second, wait_time = line.split('-')
except ValueError as e:
print("行切割错误,此行格式不是 xx-xx-xx 形式的")
print(f"错误行是: {line}")
print(e)
# 构造键值
key_value = f'{first.lower()}-{second}'
# 获取对应的字母
letter = key_map.get(key_value, None)
if letter is None:
print(f"警告:未找到对应于 {key_value} 的字母")
continue
# 将wait_time转换为浮点数
wait_time = float(wait_time)
# 计算ASCII码
ch_num = ord(letter)
# 添加到输出列表
transfer_lines.append([wait_time, "EK", "key down", [ch_num, letter, 0]])
transfer_lines.append([0, "EK", "key up", [ch_num, letter, 0]])
# 终端直接打印结果,之后在写入文件中
# 终端打印结果方法
def print_all_lines(transfer_lines):
print("[")
for line in transfer_lines:
# 使用str.format()方法来格式化输出
formatted_line = " [{:.2f},\"{}\",\"{}\",[{},\"{}\",{}]],".format(
line[0], line[1], line[2], line[3][0], line[3][1], line[3][2]
)
print(formatted_line)
print("]")
# 定义写入文件方法
def write_to_file(output_file_path):
try:
with open(output_file_path, 'w') as file:
file.write(f"[\n")
for line in transfer_lines:
formatted_line = " [{:.2f},\"{}\",\"{}\",[{},\"{}\",{}]],\n".format(
line[0], line[1], line[2], line[3][0], line[3][1], line[3][2]
)
file.write(formatted_line)
file.write(f"]\n")
print(f"文件输出到: {output_file_path}")
except Exception as e:
print("写入文件时发生错误,错误信息如下:\n")
print(e)
# 当前时间,
current_time = datetime.datetime.now()
# 格式化时间
# formatted_time = current_time.strftime("%Y-%m-%d-%H-%M-%S")
formatted_time = current_time.strftime("%m-%d-%H-%M-%S")
# print("格式化后的当前时间是:", formatted_time)
# 写入文件的路径和名字,文件名称是 原文件名.transfer.月-日-时-分-秒.txt,例如 test.txt.transfer.09-23-22-23-06.txt
# output_file_path = f'{music_filename}.transfer.txt'
output_file_path = f'{music_filename}.transfer.{formatted_time}.txt'
# !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
# 注意:
# 1.python中注释的方法之一是在一行的首端 输入井号 #
# 取消注释,则删除行首的 #
# 2.此行 print_all_lines(transfer_lines) 执行终端打印,如果不想终端打印结果,需注释此行
# 3.此行 write_to_file(output_file_path) 执行写入文件,如果不想先写入文件,需注释此行
# !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
# 打印结果
print_all_lines(transfer_lines)
# 写入文件
# write_to_file(output_file_path)
脚本说明:
- 第13行
music_filename = r'E:\ai\test.txt'
的路径名字,需要改成你自己的音符时机文本的路径。 - 默认是终端打印转换后的结果,没有把结果存储到文件中。
- 如果你需要把转换后的结果,存储到一个新的文件中,需要自定义第97行的
output_file_path
的路径值,并把第110行取消注释(就是把此行最前面的井号#
删除),默认是music_filename
原文件所在位置,新文件名字格式是原文件名字.transfer.日期.txt
。例如原文件名是test.txt
,那么转换后的输出的新文件名字就是test.txt.transfer.09-23-22-23-06.txt
,两文件路径一致。