2013-07-13 3 views
1

У меня есть txt-файл, который я хочу читать python, и из которого я хочу, чтобы python извлекал строку специально между двумя символами. Вот пример:Извлечь строку между символами из txt-файла в python

Линия

линия б

линия с

& TESTTESTTESTTESTTESTTESTTESTTESTTESTTESTTESTTESTTESTTESTTESTTESTTESTTESTTESTTESTTESTTESTTESTTESTTESTTESTTESTTESTTESTTESTTESTTESTTESTTESTTESTTESTTESTTEST!

линия d

линия е

Что я хочу питона читать строки и, когда он сталкивается с «&» Я хочу, чтобы начать печать линий (включая линию с «$») до пока он не встретит «!»

Любые предложения?

ответ

3

Это работает:

data=[] 
flag=False 
with open('/tmp/test.txt','r') as f: 
    for line in f: 
     if line.startswith('&'): 
      flag=True 
     if flag: 
      data.append(line) 
     if line.strip().endswith('!'): 
      flag=False 

print ''.join(data) 

Если файл достаточно мал, что чтение все это в памяти не является проблемой, и нет никакой двусмысленности в & или ! как начало и конец строка, которую вы хотите, это проще:

with open('/tmp/test.txt','r') as f: 
    data=''.join(f.readlines())  

print data[data.index('&'):data.index('!')+1] 

Или, если вы хотите прочитать весь файл в России, но только использовать & и ! я f они находятся в начале и конце строк соответственно, вы можете использовать регулярное выражение:

import re 

with open('/tmp/test.txt','r') as f: 
    data=''.join(f.readlines())  

m=re.search(r'^(&.*!)\s*?\n',data,re.S | re.M)  
if m: print m.group(1) 
+0

Работы действительно. Благодаря! – yamdoot

0

Это пример (очень простой!).

def Printer(): 
    f = open("yourfile.txt") 
    Pr = False 
    for line in f.readlines(): 
     if Pr: print line 
     if "&" in line: 
      Pr = True 
      print line 
     if "!" in line: 
      Pr = False 
    f.close() 
0

Одно из простых решений показано ниже. Код содержит много комментариев, чтобы вы поняли каждую строку кода. Красота кода есть, он использует с оператором заботу об исключениях и закрытие ресурсов (например, файлы).

#Specify the absolute path to the input file. 
file_path = "input.txt" 

#Open the file in read mode. with operator is used to take care of try..except..finally block. 
with open(file_path, "r") as f: 
    '''Read the contents of file. Be careful here as this will read the entire file into memory. 
     If file is too large prefer iterating over file object 
    ''' 
    content = f.read() 
    size = len(content) 
    start =0 
    while start < size: 
     # Read the starting index of & after the last ! index. 
     start = content.find("&",start) 
     # If found, continue else go to end of contents (this is just to avoid writing if statements. 
     start = start if start != -1 else size 
     # Read the starting index of ! after the last $ index. 
     end = content.find("!", start) 
     # Again, if found, continue else go to end of contents (this is just to avoid writing if statements. 
     end = end if end != -1 else size 
     '''print the contents between $ and ! (excluding both these operators. 
      If no ! character is found, print till the end of file. 
     ''' 
     print content[start+1:end] 
     # Move forward our cursor after the position of ! character. 
     start = end + 1 
Смежные вопросы