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

Python文件处理:复制文件内容时如何过滤#开头的注释行

问题原因

你的代码无法过滤注释行的核心问题是使用了'rb'二进制模式打开文件:

  • 二进制模式下读取到的每一行是bytes类型,buf[0]取到的是字节对应的ASCII整数值,和字符串'#'的判断永远不成立,所以所有行都会被写入目标文件。
  • 原有逻辑还存在遗漏:没有处理行首带缩进、空格的注释行,这类行的第一个字符不是#也会被保留。

修正后的代码

推荐直接用文本模式打开文件,处理逻辑更简单,也能避免编码问题:

with open("essays.txt", 'r', encoding='utf-8') as f1:
    with open("myfile.txt", 'w', encoding='utf-8') as f2:
        # 直接遍历文件对象逐行读取,不需要手动控制读取结束
        for line in f1:
            # 先去除行首所有空白字符,再判断是否为注释行
            if not line.lstrip().startswith('#'):
                f2.write(line)
print("File Copied")

可选调整说明

如果你的需求是仅过滤第一个字符为#的行,缩进后的注释不需要过滤,把判断条件改为if not line.startswith('#')即可。
如果确实需要使用二进制模式操作,把判断条件改为if buf[0] == ord('#')即可,但不推荐这种做法,二进制模式处理文本容易出现编码适配问题。

内容的提问来源于stack exchange,提问作者Python Learner

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.05 12:48:00