【问题标题】:First true value if statement第一个真值 if 语句
【发布时间】:2014-09-07 10:14:46
【问题描述】:

我正在遍历文本文档的行,试图找到出现在另一行之后的第一个空行(例如本例中的第 100 行)。

我的代码是:

BlankLines=[]
f=open(MyFile, 'r')
for num, line in enumerate(f):
    if line=='\n' and num>100:
        BlankLines.append(num)
Result=Blanklines[0]

有多个符合此条件的行,但我只想要符合它的第一行。这样做最优雅的方法是什么?有没有办法在不创建列表然后选择第一个元素的情况下做到这一点?

谢谢!

【问题讨论】:

标签: python


【解决方案1】:

您正在寻找break 的for-loops:

f=open(MyFile, 'r')
for num, line in enumerate(f):
    if line=='\n' and num>100:
        break
else:
    num = None
Result = num

【讨论】:

  • 所有循环!同时。
  • +1。它可以很容易地适应空白行的必要定义(例如re.match("\s*$", line) 而不是line=='\n')。
【解决方案2】:

是的,它是一个名为“break”的关键字,它从循环中退出。找到第一行后使用它。

但是,正如用户@wnnmaw 指出的那样,与“\n”相比可能不会在所有情况下都适用。如果行中有很多空格怎么办?那么它也应该被认为是空的吗?

如果你这么认为,请转至here。

【讨论】:

    【解决方案3】:

    此代码假定第一行编号为 0。(代码未经测试)第一个循环跳过您不想检查的行。

    n = 100
    f = open(MyFile, 'r')
    for _ in xrange(n): # n is first line to check for blank, skip previous lines
        next(f)
    for line in f: # reading the file continues where you left off
        line = line.strip() # allows for lines that have spaces and tabs
        if len(line) == 0:
            return n # returns line number
        n += 1
    f.close()
    

    如果您只关心只有 \n 的行,请忽略 strip() 并使用

        if line == '\n':
    

    与您的原始代码一样。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-10-01
      • 1970-01-01
      • 2021-03-04
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多