2015-02-20 3 views
0

Я понимаю основы 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 

мне было интересно, если я мог бы сделать то же самое более pythonically с itertools каким-то образом?

Я пытался что-то вдоль линий:

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

Но это просто выводит пробелы. Мне было интересно, есть ли более простой/более простой способ, который занимает меньше места, чем мой метод, печать между двумя строками текста?

Благодаря

ответ

1
  1. found является излишним.

  2. Используйте список, а не строку при накоплении для конкатенации.

  3. Поскольку добавлены только строки, содержащие текст, нет необходимости отфильтровывать пустые строки, но удаление их концов линий полезно.

  4. Если строки должны начинаться с Text, а не просто появляться в любом месте, то используйте if line.startswith("Text"): вместо if "Text" in line:.

Рассмотрим:

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) 
Смежные вопросы