如何删除dat文件中含\x00空字符的行?脚本未生效问题排查
问题分析与解决方案
核心问题
你的脚本判断的是实际的空字节(ASCII 0值字符),但从你提供的文件内容来看,文件里的\x00是文本形式的字符串(由\、x、0、0四个字符组成),并非真正的空字节。因此你的判断条件"\x00" not in line无法匹配到这些行,导致所有行被原样保留。
分场景解决方案
场景1:文件中是文本形式的\x00
修改判断条件,检查行内是否包含文本字符串\x00(Python中需用原始字符串或转义反斜杠匹配):
with open("/home/lome/ell_***_old.dat", "r") as file: lines = file.readlines() with open("/home/lome/ell_***_old.dat", "w") as file: for line in lines: # 用原始字符串匹配文本形式的\x00 if r"\x00" not in line: file.write(line.rstrip() + '\n')
场景2:文件中是实际的空字节(ASCII 0)
如果文件里确实是二进制空字节,可能是文本模式读取时的编码问题导致识别失败,改用二进制模式处理:
with open("/home/lome/ell_***_old.dat", "rb") as file: lines = file.readlines() with open("/home/lome/ell_***_old.dat", "wb") as file: for line in lines: if b"\x00" not in line: # 处理行尾换行符,避免重复添加 file.write(line.rstrip(b"\r\n") + b'\n')
验证方法
可以先打印文件的行内容,确认\x00的实际类型:
with open("/home/lome/ell_***_old.dat", "r") as f: sample_line = f.readline() # 用repr()显示字符串原始形式,区分转义字符和文本字符 print(repr(sample_line))
- 若输出为
'saibh \\x00\\x00\\x00\\x00\\ usodbh\n',属于场景1; - 若输出为
'saibh \x00\x00\x00\x00\ usodbh\n',属于场景2。
内容的提问来源于stack exchange,提问作者Lorenzo Mereu
相关产品推荐
相关产品推荐

