You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.28 00:10:12