跳过标题行的更 Pythonic 方式

2024-04-15

是否有更短(也许更Pythonic)的方式来打开文本文件并读取以注释字符开头的行?

换句话说,这是一种更简洁的方法

fin = open("data.txt")
line = fin.readline()
while line.startswith("#"):
    line = fin.readline()

在我学习 Python 的现阶段,我发现以下内容最具 Python 风格:

def iscomment(s):
   return s.startswith('#')

from itertools import dropwhile
with open(filename, 'r') as f:
    for line in dropwhile(iscomment, f):
       # do something with line

跳过文件顶部以以下内容开头的所有行#。跳过以以下内容开头的所有行#:

from itertools import ifilterfalse
with open(filename, 'r') as f:
    for line in ifilterfalse(iscomment, f):
       # do something with line

对我来说,这几乎就是可读性的全部内容;从功能上来说,两者几乎没有区别:

for line in ifilterfalse(iscomment, f))

and

for line in (x for x in f if not x.startswith('#'))

将测试分解为自己的函数可以使代码的意图更加清晰;这也意味着,如果您对注释的定义发生变化,您可以在一个地方进行更改。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

跳过标题行的更 Pythonic 方式 的相关文章

随机推荐

  • Java 输入问题 - 如何比较字符串[重复]

    这个问题在这里已经有答案了 这看起来很简单 但我已经被困在这里几个小时了 我有一个疑问 当你必须在Java中比较两个字符串时 如果我只是做这样的事情 String var1 hello String var2 hello 然后在另一个函数中
  • SwiftUI:ScrollView 拖动底部工作表

    我正在尝试创建一个 SwiftUI Scrollview 来拖动其容器 如下所示 https drive google com file d 1O92DgsVI1OjM1HEUXUwVywB8gcdShOP view usp sharing
  • PromQL if then 语句等效

    我有一个执行计数的简单 PromQL 查询 sum up container name my container environment name env 这是 Grafana 仪表板的一部分 允许从下拉菜单中选择 env 我想根据环境执行
  • SQL Server 分区查询

    当我运行查询时 select 100 50 它给我 2 很好 但是当我运行查询时 select 50 100 我原以为它会给我 0 5 但它却给了我 0 为什么 我怎样才能得到0 5 select 25 30 100 我预计它会给我 83
  • 获取Webbrowser Control中URL的原始源代码

    我有一个嵌入在 C Windows 应用程序中的浏览器控件 我想获取 url 包含的原始 HTML 不是渲染的 HTML 它可能已被 javascript 修改 与在 IE 中查看源代码中的内容相同 有什么建议么 WebBrowser Do
  • Python:使用 %x(区域设置)格式化的日期与预期不符

    我有一个日期时间对象 我想根据操作系统区域设置 例如在 Windows 7 区域和语言设置中指定 为其创建日期字符串 遵循Python的日期时间格式化文档 http docs python org library datetime html
  • Chrome Webview 中的 Service Worker 支持

    Android 版 chrome webview 是否支持 Service Worker 如果是 则支持哪个版本 尝试谷歌搜索 但没有找到正确的信息 As per 本公告 https chromereleases googleblog co
  • Opencv 函数只能以 C 代码方式调用,不能以 C++ 方式调用

    我对 Opencv 真的很陌生 按照说明下载并安装 Opencv 2 4 后 我开始编写我的第一个 Opencv 程序 这基本上是网络上教程的副本 include
  • 无法序列化泛型类型

    我正在尝试使用 protobuf net 序列化通用类型 但 protobuf net 说它无法序列化它 As in RuntimeTypeModel Default CanSerialize typeof MyGenericClass l
  • 在asp.net中通过javascript警报显示异常消息

    我试图通过 javascript 警报框显示异常消息 这是示例代码 public static void HandleException Page page Exception ex string message ex Message To
  • Spring中独立应用程序中的预定方法

    我有一个方法需要每天 07 00 执行 为此 我使用该方法创建了一个 bean 并用 Scheduled cron 0 0 7 在这个bean中我创建了一个mainfunction 它将初始化 spring 上下文 获取 bean 并调用方
  • 在 python 2.6 上加载 win32file.pyd 时出现问题

    即使是使用 win32file 的简单脚本 我也无法使 py2exe 正确打包 我不断收到以下错误消息 Traceback most recent call last File dependency checker py line 1 in
  • java中二维数组在内存中是如何表示的?

    我正在尝试使用键 值对实现数据结构 并正在研究数组实现 实现此目的的一种方法是为键和值声明单独的一维数组 private int keys new int N private int values new int N 但是 可以通过如下声明
  • 如何从正在侦听 dart 中某个流的函数返回字符串?

    我有一个名为 foo 的函数 它正在监听标准输出 我想要的是返回从标准输出获得的一些字符串 这是我的功能 dynamic foo process return process stdout transform UTF8 decoder li
  • 在 iPhone 上自定义 NSLog 函数

    我知道可以对 Objective C 中的选择器和方法进行方法混合 是否可以将 NSLog 等函数混合到我们的自定义函数中 我想在自定义函数中添加一些额外的功能和 NSLog EDIT 我最终使用了另一个在内部调用 NSLog 的函数 de
  • 寻找有向或无向图中的最短循环

    我正在寻找一种算法来找到有向或无向图中的最短周期 例如 对于节点 3 算法可能返回 周期1 3 gt 10 gt 11 gt 7 gt 8 gt 3 周期2 3 gt 10 gt 9 gt 8 gt 3 对于这些循环 最短的是循环 2 位于
  • Cloudformation 不支持在 apigateway 中创建 vpc 链接

    In aws api gateway there is a section called API Link and I can manually set that 问题是我在 cloudformation 文档中找不到有关如何通过 api
  • 无法svn update,解压时出错

    我的 svn 远程仓库有问题 我在 Windows 8 1 上运行 svn 版本 1 8 5 当我尝试执行 svn update 时出现错误 svn E120104 ra serf 解压时出错 我能够干净地结账 有谁知道如何解决这个问题 这
  • 在TensorFlow中,变量名称中的“:0”是什么意思?

    import tensorflow as tf with tf device gpu 0 foo tf Variable 1 name foo assert foo name foo 0 with tf device gpu 1 bar t
  • 跳过标题行的更 Pythonic 方式

    是否有更短 也许更Pythonic 的方式来打开文本文件并读取以注释字符开头的行 换句话说 这是一种更简洁的方法 fin open data txt line fin readline while line startswith line