伺服驱动器TXT原始位置电压数据手动格式化整理方案咨询
规整伺服驱动器TXT反馈数据的解决方案
手动整理这种混乱的伺服反馈数据确实头大——拆分的数值、乱入的错误码、合并的字段,想想都累。不过既然你已经明确了位置数据(12字符,含小数点)和电压数据(9字符,含小数点)的固定格式,咱们可以用自动化脚本+正则匹配的方式高效解决,比手动快N倍。
下面是具体的处理思路和可直接运行的Python脚本:
核心处理逻辑
- 清理无效内容:先把所有
!FFxx这类错误码彻底移除,再消除所有空白字符(空格、换行),把所有有效字符拼接成一个长字符串,解决数值拆分的问题。 - 逐字符匹配提取:从左到右扫描长字符串,优先匹配12位的位置数据(因为长度更长,避免和电压数据误判),匹配成功就输出并跳过对应长度;如果不匹配,再尝试9位的电压数据;都不符合就跳过一个字符(处理极端拆分的情况)。
可运行的Python脚本
这个脚本可以直接读取你的原始TXT文件,输出规整后的每行一个数据的文件:
import re def clean_servo_data(input_file, output_file): # 读取原始文件内容 with open(input_file, 'r', encoding='utf-8') as f: content = f.read() # 第一步:移除所有!FF开头的错误码(比如!FF10、!FF02) content = re.sub(r'!FF\d+', '', content) # 第二步:移除所有空白字符,把所有有效字符连在一起 content = re.sub(r'\s+', '', content) # 第三步:逐字符扫描,提取符合格式的位置和电压数据 result = [] i = 0 total_length = len(content) while i <= total_length - 9: # 至少保留9位用于匹配电压数据 # 优先尝试匹配12位的位置数据(必须包含且仅包含一个小数点) if i + 12 <= total_length: candidate = content[i:i+12] # 验证格式:数字+小数点+数字 if candidate.count('.') == 1 and re.match(r'^\d+\.\d+$', candidate): result.append(candidate) i += 12 continue # 尝试匹配9位的电压数据 candidate = content[i:i+9] if candidate.count('.') == 1 and re.match(r'^\d+\.\d+$', candidate): result.append(candidate) i += 9 continue # 都不匹配则跳过一个字符,处理拆分的零散字符 i += 1 # 将结果写入新文件,每行一个数据 with open(output_file, 'w', encoding='utf-8') as f: f.write('\n'.join(result)) # 替换成你的实际文件路径 clean_servo_data('原始数据.txt', '规整后数据.txt')
脚本使用说明
- 把你的原始TXT文件重命名为
原始数据.txt,和脚本放在同一个文件夹里。 - 运行脚本,会生成一个
规整后数据.txt,里面就是每行一个位置或电压数据的规整内容。 - 如果你的文件编码不是utf-8,可以把
encoding='utf-8'改成encoding='gbk'或者其他对应编码。
手动整理的应急技巧(如果暂时不想用脚本)
如果只是少量数据需要处理,可以用文本编辑器(比如Notepad++)的正则功能快速处理:
- 第一步:按
Ctrl+H打开替换窗口,查找框输入!FF\d+,替换框为空,点击「全部替换」移除所有错误码。 - 第二步:查找框输入
\s+,替换框为空,点击「全部替换」消除所有空白字符。 - 第三步:用列编辑功能,手动按12位、9位的长度拆分字符串,每行粘贴一个符合格式的数值。
内容的提问来源于stack exchange,提问作者mechbaral
相关产品推荐
相关产品推荐

