打印文件部分的不同方法

时间:2015-02-20 12:46:40

标签: python parsing itertools

我理解python的基础知识,现在我正在寻找更加诡异的代码。

所以,如果我有一个文本文件,请说:

This is the start
Text1
Text2

Text3
This is the end

我想要一个将通过该文件的脚本,并且仅提取:

Text1
Text2
Text3

所以我有这样做的方式:

import sys

string = " "
found = False
with open(sys.argv[1]) as input_file:
    for line in input_file:
        if "Text" in line:
            found = True
        if found:
                string += line
                if "Text3" in line:
                    break

print "\n".join(string.split()) ## I do this to get rid of the line that's just a new line

我想知道我是否能以某种方式与itertools进行更多的python相同的活动?

我正在尝试以下方面:

with open(sys.argv[1]) as input_file:
    for line in iter(input_file.readline,'This is the end\n'):
        print line.strip()

但这只是打印空白。我想知道是否有更简单/更简洁的方式,比我的方法更少,在两行文本之间打印?

由于

1 个答案:

答案 0 :(得分:1)

  1. found是多余的。

  2. 累积连接时使用列表而不是字符串。

  3. 由于只添加包含文本的行,因此无需过滤掉空行,但删除行结尾非常有用。

  4. 如果行必须以Text开头,而不是只显示在其中的任何位置,请使用if line.startswith("Text"):代替if "Text" in line:

  5. 考虑:

    import sys
    
    L = []
    with open(sys.argv[1]) as input_file:
        for line in input_file:
            if "Text" in line:
                L.append(line.strip())
                if "Text3" in line:
                    break
    
    print "\n".join(L)