Python解析Markdown数据时append行到列表返回空列表问题
你的代码存在三个核心错误,才会导致my_array为空:
- 第一是条件判断的逻辑层级错误:你将处理数据行的
num_fields == 15分支,和年份、队伍判断的分支平级放在了判断val值的分支下,只有当行字段数等于3、且val等于---时才会走到处理数据行的分支,而正常数据行的字段数不等于3,根本不会触发row的赋值逻辑,你看到打印row正确应该是测试时的特殊情况,实际逻辑是不通的。 - 第二是append语句位置完全错误:你把
my_array.append(row)放在了for循环遍历所有行的外面,循环内每次都会把row重置为空列表,就算你中间生成了有效的row,也没有及时添加到my_array里,循环结束后只会把最后一次重置的空row加进去。 - 第三是变量作用域问题:如果行的字段数不等于3,val变量不会被定义,运行时会直接报错。
修正后可正常运行的代码如下:
with open('adelaide.md', 'r') as f: my_array = [] team = '' year = '' for line in f: row = [] line = line.strip() fields = line.split('|') num_fields = len(fields) # 先处理队伍、年份行 if num_fields == 3: val = fields[1].strip() if val.isnumeric(): year = val elif val != '---': team = val # 再单独处理数据行 elif num_fields == 15: row.append(team) row.append(year) for i in range(1, 14): row.append(fields[i].strip()) print(row) # 生成有效row后立刻加入数组 my_array.append(row)
调整后把数据行的判断和队伍年份的判断拆分开,生成有效row后立刻追加到my_array里,就能得到你要的结果。
内容的提问来源于stack exchange,提问作者manavhs13
相关产品推荐
相关产品推荐

