【问题标题】:Skip over lines in python [duplicate]跳过python中的行[重复]
【发布时间】:2017-06-03 09:19:33
【问题描述】:

我正在用 python 读取文件:

alist = [line.rstrip() for line in f]
  for line in alist:
    if line[10] == 4:
       hop over 4 lines

文本文件示例:

  • 第一行
  • 第2行
  • 第 3 行
  • 第 4 行
  • 行有 4 blabla
  • 要跳过的行
  • 要跳过的行
  • 要跳过的行
  • 要跳过的行

当一行中的 10 个元素是 x(某个数字 1、2、3、4、..)时,我想跳过等量的行。找了好久都没找到答案,求大神帮忙!

【问题讨论】:

  • 好的,你的问题在这里不清楚。 if line[10] == 4: 永远不会是真的......line[10] == '4'(即字符 4)或者它是否等于整数 4。

标签: python python-3.x text-files


【解决方案1】:

您可以这样做的一种方法是使用 while 循环。这是一个例子:

i = 0
while i < 20:
  print(i)
  i += 4`

打印出来

0
4
8
12
16`

我不完全确定我理解在哪里以及为什么你试图跳过行,所以如果你能提供这些信息,我可以更改代码成为你所需要的更多。

【讨论】:

  • 我认为这不是 OP 的要求。他不是在问如何在每次迭代中迭代值 4。即使他是,你的解决方案也不是最好的,你可以这样做for i in line[0::4]
【解决方案2】:

为了实现这一点,您可以使用while 遍历文件的索引

i = 0   # initialize counter
file_lines = f.readlines()  # It contains the list of all the lines

while i < len(file_lines):
    line = file_lines[i].strip()  # stripped content of `i`th line
    if line[10].isdigit():  # check if 10th character is digit
        match = line[10]
        # Do something

        i += int(match)    # increment the counter by 10
    else:
        i += 1

【讨论】:

    【解决方案3】:

    试着把alist变成一个可迭代的,然后你可以通过调用next丢弃你不想要的值

    alist = [line.rstrip() for line in f]
    it = iter(alist)
    for line in it:
        print(line)
        if line[10] == 4:
            for i in range(4):
                try: 
                    _ = next(it)
                except StopIteration:
                    break
    

    【讨论】:

    • 我认为这是我们能想到的最接近的答案,但是line[10] == 4 仍然没有意义!
    • 在这种情况下,为什么首先要创建 listcomp?为什么不for line in f,简单地说。
    • 很好,只有两点:不需要_ = ...,并且f(文件)已经是一个迭代器,所以你可以使用它。
    • if line[10] == '4': 会更有意义(或类似的东西)
    • @tobias_k 我正在使用_ = ...,因为如果在交互模式下使用python,那么如果没有被捕获,则返回值会打印到控制台,这会破坏点演示。没错,文件是迭代器,但列表不是 Op 目前使用的。我同意他的条件没有任何意义
    猜你喜欢
    • 1970-01-01
    • 2015-05-17
    • 2018-07-20
    • 1970-01-01
    • 2020-11-14
    • 2011-05-08
    • 2020-11-02
    • 2014-07-30
    相关资源
    最近更新 更多