Python中同时用or、and、not的if语句是否合法?语法报错求助
解决Python文件解析中的语法错误与数据筛选问题
问题分析
原代码的语法错误核心出在if语句:not >= end是非法写法,not必须修饰完整的布尔表达式,不能直接跟运算符。另外逻辑运算符and优先级高于or,不加括号会导致判断逻辑不符合预期。
同时代码还存在以下逻辑问题:
- 循环中每次用
w模式打开test.txt,会覆盖之前写入的内容,应该用a追加模式 count递增位置错误,导致行号与实际读取的行不匹配- 重复打开文件(先
readlines再用fileinput),流程冗余
修正后的代码
import time filename = '1.csv' # 读取所有行并获取总行数 with open(filename) as file: lines = file.readlines() line_count = len(lines) end = line_count - 7 print(f'line_count is: {line_count}') print(f'end is: {end}') time.sleep(3.0) # 打开输出文件,用追加模式避免内容被覆盖 with open("test.txt", "a") as f_out: # 用enumerate直接获取行索引和内容,索引从0开始 for count, line in enumerate(lines): # 明确逻辑:要么是第71行(对应索引70),要么是103行到end行之间的内容(索引102到end-1) if count == 70 or (count >= 102 and count < end): print(line.strip(), count+1) f_out.write(line)
关键修正说明
- 语法修复:将
not >= end改为count < end,同时用括号明确or与and的逻辑优先级,确保判断逻辑符合需求 - 行号匹配:Python列表索引从0开始,原问题中的第71行对应索引70,第103行对应索引102,结束行
line_count-7对应的最大索引是end-1,因此用count < end判断 - 写入优化:一次性打开输出文件并使用追加模式,避免循环中反复打开关闭文件,同时防止内容被覆盖
- 流程简化:直接遍历已读取的
lines列表,无需使用fileinput,代码更简洁高效
内容的提问来源于stack exchange,提问作者KurtA
相关产品推荐
相关产品推荐

