我建议您在看到

#

字符时不要忽略整行。只是忽略其余部分。这可以通过名为

partition

的字符串方法轻松完成:

with open("filename") as f:

for line in f:

line = line.partition('#')[0]

line = line.rstrip()

# ... do something with line ...

partition

返回一个元组: 分节线, 该分节线之前的所有内容以及该分节线之后的所有内容。因此, 在使用

[0]

进行索引时, 我们仅将零件放置在剖面线之前。

编辑: 如果您使用的Python版本没有

partition()

, 则可以使用以下代码:

with open("filename") as f:

for line in f:

line = line.split('#', 1)[0]

line = line.rstrip()

# ... do something with line ...

这将使用#字符分割字符串, 然后在分割之前保存所有内容。

1

自变量除以1后,

.split()

方法的执行将停止; 由于我们仅获得第0个子字符串(通过使用

[0]

进行索引), 因此即使您不使用

1

参数Response, 也会得到相同的结果, 但可能会更快。(由于@gnr的注释, 从我的源代码简化而来。我的源代码很乱, 没有充分的理由; 谢谢@gnr。)

您也可以只编写自己的

partition()

版本。这是一个名为

part()

的名称:

def part(s, s_part):

i0 = s.find(s_part)

i1 = i0 + len(s_part)

return (s[:i0], s[i0:i1], s[i1:])

@dalle指出#可以出现在一行上。正确设置它并不容易, 因此我只是忽略了它, 但是我应该说些什么。

如果您的输入文件具有足够简单的规则来使用带引号的字符串, 则并不困难。如果您接受任何有效的Python引号引起来的字符串, 将很困难, 因为存在单行, 双行, 多行反斜杠引号, 行尾转义字符串, 三引号(使用单引号或双引号), 甚至是原来的弦! 正确处理所有这些问题的唯一可能方法是使用复杂的状态机。

但是, 如果我们将自己限于简单的带引号的字符串, 则可以使用简单的状态机来处理它。我们甚至可以在字符串中使用反斜杠双引号。

c_backslash = '\\'

c_dquote = '"'

c_comment = '#'

def chop_comment(line):

# a little state machine with two state varaibles:

in_quote = False # whether we are in a quoted string right now

backslash_escape = False # true if we just saw a backslash

for i, ch in enumerate(line):

if not in_quote and ch == c_comment:

# not in a quote, saw a '#', it's a comment. Chop it and return!

return line[:i]

elif backslash_escape:

# we must have just seen a backslash; reset that flag and continue

backslash_escape = False

elif in_quote and ch == c_backslash:

# we are in a quote and we see a backslash; escape next char

backslash_escape = True

elif ch == c_dquote:

in_quote = not in_quote

return line

我真的不想参与新手问题的复杂性, 但是这个状态机非常简单, 我希望它会很有趣。

python3程序运行中会跳过注释行,Python: 读取文件时如何忽略#条注释行相关推荐

  1. python3程序运行中会跳过注释行_[python] 去除代码源文件中单行注释

    """ 利用正则表达式去除文件中的单行注释,支持多行稍加更改即可 """ import os import re pattern_c = { ...

  2. Dump程序运行中的状态,变量值,等到文件

    在无法设置断点或数据量巨大的情况下,将程序运行状态输出到磁盘文件后进行分析是个有效的方法.如果数据较少,可以直接通过设置断点的"when hit..." 向 output 窗口输出 ...

  3. vscode 快速调到定义处_vim技巧:在程序代码中快速跳转,在文件内跳转到变量定义处...

    本篇文章介绍 vim 的一些使用技巧: 在程序代码中快速跳转 在文件内跳转到变量定义处 在程序代码中快速跳转 在 vim 中查看代码文件时,可以使用下面命令在程序代码中快速跳转,提高效率. % 跳转到 ...

  4. c语言代码存放的区域 堆栈,C语言中内存分布及程序运行中(BSS段、数据段、代码段、堆栈)...

    BSS段:(bss segment)通常是指用来存放程序中未初始化的全局变量的一块内存区域.BSS是英文Block Started by Symbol的简称.BSS段属于静态内存分配. 数据段 :数据 ...

  5. 使用Python读取文件夹中的图片

    文章目录 Python创建新的文件夹 Python读取文件夹中的图片内容以及存取   一个文件夹中含有大量的图片文件,jpg格式和png格式的.需要从中选出一些比较适合电脑分辨率的,也就是宽度大于高度 ...

  6. python中读取文件内容-Python读取文件内容的三种常用方式及效率比较

    本文实例讲述了Python读取文件内容的三种常用方式.分享给大家供大家参考,具体如下: 本次实验的文件是一个60M的文件,共计392660行内容. 程序一: def one(): start = ti ...

  7. python读取文件路径报invalid_关于Python读取文件的路径中斜杠问题

    最近用Python读取文件,发现有时候用 '\' 会报错,换成 '\\' 就不会报错.查了下资料发现,'\'是Python的转义字符,如果路径中存在'\t'或者'\r'这样的特殊字符,'\'就无法起到 ...

  8. 在python中读取文件时如何去除行末的换行符以及在Windows与Linux中的区别

    [时间]2018.11.14 [题目]在python中读取文件时如何去除行末的换行符以及在Windows与Linux中的区别 一.去除换行符 以使用readline进行读取为例: import red ...

  9. python3文件的编码类型是_Python3.x环境创建Python脚本文件时,需要将文件编码格式设置为...

    Python3.x环境创建Python脚本文件时,需要将文件编码格式设置为 答:UTF-8 在黄种人群中有一种叫白化病的隐性遗传病,其致病原因是 答:表皮中的黑色素细胞缺乏酪氨酸酶: 注射用水可通过( ...

最新文章

  1. Java Proxy和CGLIB动态代理原理
  2. Discuz1.5 密码错误次数过多,请 15 分钟后重新登录
  3. 对Servlet容器的补充
  4. 步进电机编写单4拍或4-8拍方式的汇编或c语言控制程序.,基于SCM和PLC的两种步进电机控制方法...
  5. 微信小程序初始化 operateWXData:fail invalid scope
  6. golang 解析php序列化,golang实现php里的serialize()和unserialize()序列和反序列方法
  7. 有关二叉树的相关实现:建树,遍历(递归与非递归实现)
  8. AR+LBS街景实景红包PokemonGo游戏捉妖夺宝营销解决方案定制开发暨百度高德地图Unity插件SDK
  9. 算法面试题(数据结构)
  10. Java代码审查工具 FindBugs下载、安装和使用(无需集成环境一键安装使用)
  11. Android飞机大战游戏报告,基于android的飞机大战游戏设计与开发.doc
  12. Typora入门手册
  13. 超全Python图像处理讲解(多图预警)
  14. day04 java学习
  15. 用瑞利准则研究显微镜物镜的分辨率
  16. 月薪30K的运维工程师面试宝典(面试必备干货)
  17. CentOS7下matplotlib(JupyterLab、Anaconda3)显示中文乱码问题
  18. 如何做好文献阅读及笔记整理
  19. PyTorch validation loss 增大,为什么 accuracy 也在增大?
  20. 企业应用IPv6改造方案

热门文章

  1. 嘉年华回顾丨杜小勇教授带你解密One Size Does not Fit All?
  2. 活动丨4场直播华丽丽来袭,快来参与
  3. 文档下载:《两万字深度介绍分布式系统原理》.pdf
  4. Oracle 19c 新特性:混合分区表Hybrid partitioned tables强体验
  5. VRAR产业峰会暨第二届华为VR开发应用大赛颁奖典礼在和平区成功举办
  6. 云小课 | 玩转HiLens Studio之快速订购HiLens Studio版本
  7. 来不及解释!Linux常用命令大全,先收藏再说
  8. 让垃圾分类开发“极快致简”的好物件,零基础的开发小白也能轻松驾驭它!
  9. 【华为云技术分享】如何拆分用户故事
  10. Reactive(3)5分钟理解 SpringBoot 响应式的核心-Reactor