如何提取文本文件每行指定位置的数字串为列表并解决相关报错
解决方法
错误原因
- 你代码中用
range作为变量名接收了line.split()返回的列表,覆盖了Python内置的range函数,调用range(3,10)时触发*'list' object is not callable*报错。 - 提取子串的逻辑错误:你需要按字符位置取指定区间的内容,不需要用
split拆分整行,直接用字符串切片即可。Python字符串切片为左闭右开规则,要取从0开始计数的第5到14位共10个字符,切片区间写为[5:15]即可。
完整实现代码
第一步:读取文件提取目标内容列表
num_str_lst = [] with open('k_d_m.txt', 'r', encoding='utf-8') as f: for line in f: # 提取第5到14位共10个字符 target = line[5:15] num_str_lst.append(target) # 验证提取结果 print(num_str_lst)
第二步:对提取内容做校验
你后续的校验逻辑需要遍历每个提取到的字符串执行,同时修正了原代码的缩进错误,以及增加了非数字字符的兼容处理:
nth = 2 for num_str in num_str_lst: # 将字符串每一位转为整数,非数字字符按0处理(可按需调整规则) num_lst = [int(c) if c.isdigit() else 0 for c in num_str] print(f"当前校验字符串:{num_str},转换后的数字列表:{num_lst}") odd_total = sum(num_lst[0::nth]) even_total = sum(num_lst[1::nth]) print(f"奇数位求和:{odd_total},偶数位求和:{even_total}") if odd_total - even_total in (0, 11): print("The number is ok") else: print("The number is not ok")
运行验证
以上代码运行后会先输出提取的目标字符串列表,再逐个输出每个字符串的校验结果,完全匹配你的需求。
内容的提问来源于stack exchange,提问作者user13711870
相关产品推荐
相关产品推荐

