2013-02-28 5 views
2

내가하고 싶은 일은 텍스트 파일의 "Text2"문자열을 검색 한 다음 두 줄 ("삽입 된 텍스트")을 삽입합니다. "텍스트 2"다음에. "텍스트 2"는 텍스트 파일의 모든 행에있을 수 있지만 텍스트 파일 내에서 한 번 나타납니다.텍스트 파일을 검색하고 라인을 삽입

그래서 여기에 원래 파일입니다 :

Text1 
Text2 
Text3 
Text4 

그리고 여기에 내가 원하는 무엇 :

Text1 
Text2 
Text3 
Inserted Text 
Text 4 

그래서 나는 이미 아래의 코드를 사용하여 선 위에 텍스트를 추가하는 방법을 알고있다.

for line in fileinput.input('file.txt', inplace=1,backup='.bak'): 
    if line.startswith('Text 4'): 
     print "Inserted Text" 
     print line, 
    else: 
     print line, 

하지만 파일에서 검색하는 텍스트 뒤에 두 줄을 추가하는 방법을 모르겠습니다. 당신이 목록에 파일 내용을로드하는 경우

+2

인쇄 라인과 다른 절과 같은 것 사용할 수 있습니다 – Boaz

답변

2

, 그것을 조작하는 것이 더 쉽습니다 :

searchline = 'Text4' 
lines = f.readlines() # f being the file handle 
i = lines.index(searchline) # Make sure searchline is actually in the file 

지금 i 라인 Text4의 인덱스를 포함합니다. 당신은 그것을 사용할 수 있으며 list.insert(i,x) 전에 삽입 :

lines.insert(i+1, 'Different random text') 

또는 세 줄 이후 :

lines.insert(i+3, 'Last example text') 

그냥 IndexError의 오류 처리를 포함해야하고

lines.insert(i, 'Random text to insert') 

이후 당신이 원하는대로 할 수 있습니다. 경우이를 종료 한 후

+0

정확한 일치를 위해 작동합니다. 문자열로 시작하거나 문자열을 포함하는 행에 대해 비슷한 것이 있습니까? – Mawg

+0

요즘 내 파이썬이 녹슬지 만, 꽤 간결한 방법을 알지 못합니다. 하지만 제가 아는 한, @ Boaan의 솔루션과 비슷한 올바른 인덱스를 찾기 위해 라인을 반복해야합니다. –

2

당신은 단지 라인을 중복 인쇄하는

f = open("file.txt","rw") 
lines = f.readlines() 
for i in range(len(lines)): 
    if lines[i].startswith("Text2"): 
      lines.insert(i+3,"Inserted text") #Before the line three lines after this, i.e. 2 lines later. 

print "\n".join(lines) 
+0

이 문자열을이 파일에 쓰려면? – n00dle

2

더러운 빠른-N-방법은 그

before=-1 
for line in fileinput.input('file.txt', inplace=1,backup='.bak'): 
    if line.startswith('Text 2'): 
     before = 2 
    if before == 0 
     print "Inserted Text" 
    if before > -1 
     before = before - 1 
    print line, 
+0

+1은 메모리에 전체 파일을로드하지 않음 –

+0

그리고 라인 처리는 카테고리로 시작합니다. 'if 'Text 2'를 줄에 사용 :'문자열을 포함하는 줄을 찾으려면 – Mawg

관련 문제