Python文本解析器split输出格式异常及返回None问题求助
Python文本解析器问题解决办法
1. 解决parse_rows返回None的问题
- 核心原因是你的
parse_rows方法可能丢失了返回语句。如果修改方法时只添加了遍历打印逻辑,却删掉或漏掉了return cleaned_rows,就会导致方法默认返回None。 - 修正示例:确保方法末尾保留返回逻辑
def parse_rows(self): rows = self.string.split("\n") cleaned_rows = [list(map(str.strip, row.split(self.delimiter))) for row in rows if row.strip()] # 即使添加了遍历打印,也要保留return for row in cleaned_rows: print(row) return cleaned_rows
- 额外检查:确认
text_parser类的__init__方法正确初始化了self.string和self.delimiter,避免因初始化错误导致解析失败。
2. 实现分行格式化输出
默认print打印列表会输出单行,要得到预期的分行对齐格式,有三种实用方案:
方案一:用标准库pprint(推荐)
pprint专门用于格式化打印复杂数据结构,自动处理缩进和分行:
import pprint tp = text_parser(S, ",") rows = tp.parse_rows() pprint.pprint(rows)
输出效果和你预期的完全一致。
方案二:手动循环控制输出格式
自定义缩进和换行,完全匹配预期样式:
tp = text_parser(S, ",") rows = tp.parse_rows() print("[") for idx, row in enumerate(rows): # 控制每行的缩进 indent = " " * 10 print(f"{indent}{row},") print(" " * 8 + "]")
方案三:用json模块格式化
通过indent参数控制缩进量,实现分行输出:
import json tp = text_parser(S, ",") rows = tp.parse_rows() print(json.dumps(rows, indent=10))
补充:修复parse_columns的依赖问题
原代码中parse_columns依赖self.rows,但parse_rows仅返回结果未赋值给实例属性,会导致调用parse_columns报错。可以修改方法确保数据关联:
def parse_rows(self): rows = self.string.split("\n") self.rows = [list(map(str.strip, row.split(self.delimiter))) for row in rows if row.strip()] return self.rows def parse_columns(self): cols = [list(col) for col in zip(*self.rows)] return cols
之后调用parse_columns前先执行parse_rows,即可正常获取列数据,格式问题同样用上述三种方案解决。
内容的提问来源于stack exchange,提问作者TheDenyo
相关产品推荐
相关产品推荐

