Python提取文件行末数值时触发AttributeError:'str'无slice属性
解决AttributeError: 'str' object has no attribute 'slice' 问题
你遇到的这个错误是因为Python字符串对象没有slice()方法,正确的字符串切片方式是使用方括号语法[起始索引:结束索引],而非调用方法。
除了这个核心错误,你的代码还有几处问题需要修正才能完成需求:
count当前会累加所有行的数量,但应该只统计以X-DSPAM-Confidence开头的有效行- 提取的数字是字符串类型,直接加到
sum里会触发类型错误,需要先转为浮点数 - 固定索引切片不够可靠,若行内格式有细微变化(比如空格数量)就会出错,更稳妥的方式是按分隔符分割字符串
修正后的完整代码
total = 0 # 避免用sum做变量名,sum是Python内置函数 count = 0 # 使用with语句自动管理文件,无需手动close with open("C:/Users/Desktop/PDS/sample.txt", "r") as myFile: for line in myFile: line = line.strip() if line.startswith("X-DSPAM-Confidence"): # 按冒号分割,提取后续内容并转为浮点数 confidence = float(line.split(":")[1].strip()) total += confidence count += 1 # 仅统计有效行 # 避免无有效行时触发除以0错误 if count > 0: print("Sum: ", total) print("Avg: ", total / count) else: print("未找到符合条件的行")
关键修正点说明
- 替换slice()为鲁棒的提取方式:用
split(":")分割字符串,比固定索引切片更适配格式变化,能稳定提取数字部分。 - 数值类型转换:通过
float()将提取的字符串转为数值,才能正常参与求和计算。 - 正确统计有效行:把
count +=1移到判断语句内部,仅对符合条件的行计数。 - 文件安全管理:with语句会自动处理文件关闭,避免因异常导致的资源泄漏。
- 变量名规范:改用
total替代sum,防止覆盖Python内置函数。 - 异常预防:添加无有效行的判断,避免触发
ZeroDivisionError。
内容的提问来源于stack exchange,提问作者Tanaya
相关产品推荐
相关产品推荐

