如何在Pandas中使用记录分隔符0x1E作为read_table分隔符
解决Pandas用0x1E作为记录分隔符的问题
你的问题出在read_table的默认行为上:它会先按换行符把文件拆成多行,再用指定的分隔符分割每行,但你的0x1E分隔符是在跨行的记录末尾,导致解析逻辑完全错位。
给你两种可行的解决办法:
方法一:先读取整个文件再处理
这种方式更直观,先把文件内容全部读进来,去掉换行符,再用0x1E分割成完整的记录,最后解析成DataFrame:
import pandas as pd import json # 读取文件并移除所有换行符 with open("separator.log", "r", encoding="utf-8") as f: content = f.read().replace("\n", "") # 用0x1E分割记录,过滤掉空字符串 records = [rec for rec in content.split(chr(0x1E)) if rec] # 解析每个JSON记录并生成DataFrame df = pd.DataFrame([json.loads(rec) for rec in records]) print(df)
方法二:强制read_csv忽略换行符
利用read_csv(read_table本质是read_csv的封装)的lineterminator参数,指定一个文件中不存在的字符(比如\x00空字符),让它把整个文件当作一行,再用0x1E分割:
import pandas as pd import json # 读取文件,指定分隔符为0x1E,行终止符用不存在的空字符 df = pd.read_csv("separator.log", sep=chr(0x1E), engine="python", lineterminator="\x00", header=None) # 移除每个字段里的换行符,解析JSON并展开成列 df = df[0].str.replace("\n", "").apply(json.loads).apply(pd.Series) print(df)
为什么之前的尝试失败?
- 用
sep="[\x1E]"时,read_table先按换行拆行,每行里没有0x1E(分隔符在换行前),所以每行被当作一个字段,导致输出混乱; - 直接用
sep=chr(0x1E)报错,是因为文件里的换行符被当作行终止符,每行内容里没有分隔符,解析时触发了语法错误。
内容的提问来源于stack exchange,提问作者Adam Howell
相关产品推荐
相关产品推荐

