2014-07-24 3 views
1

탭으로 구분 된 txt 파일이 있습니다.가장 효율적으로 탭으로 구분 된 txt의 n 번째 행을 제거합니다.

탭으로 구분 된 txt의 n 번째 행을 제거하고 싶습니다.

n = 1 

다음 프로그램이 파일의 바로 첫 번째 행을 제거합니다 같은

나는 할당합니다.

프로그램이 전체 입력 파일을 읽지 않고도 수행하는 경우 환상적입니다.

나는 내 이전 질문 중 하나 배울려고 :

Concatenate tab-delimited txt files vertically

이 질문에 수직으로 두 개의 파일이 txt 탭으로 구분 된 합치되었다. 그래서이 과정을 뒤집는 것이 저에게 비슷한 것을 할 것이라고 생각했습니다. 그러나 나는 그것을하는 방법을 찾을 수 없었다.

나는 또한 많은 다른 stackoverflow 대답을 시도했다.

그러나 그들은 오히려 '제거 n 번째 라인'

(How to delete a line from a text file using the line number in python, Deleting a specific line in a file (python), Deleting a line from a file in Python)

+1

줄의 길이가 모두 같은 경우가 아니면 모든 줄을 읽고 제거 할 줄 제외한 모든 줄을 인쇄하십시오. – tripleee

+1

[파이썬에서 줄 번호를 사용하여 텍스트 파일에서 한 줄을 지우는 방법] 중복 가능 (http://stackoverflow.com/questions/17747522/how-to-delete-a-line-from-a-text- 파일에서 행 번호를 사용하는 파이썬) – tripleee

+0

@ tripleee이 질문의 제목에 줄 번호를 사용하여 삭제하는 내용이 나와 있지만 그 질문은 실제로는 아닙니다. 이 질문은 명시 적으로 "phrase = 'dog barked'"를 지정하고 해당 문구가있는 행을 삭제합니다. – user3123767

답변

1

itertools.islice을 사용할 수 있습니다. 여기에 파이썬 for-loop가 포함되어 있지 않으므로 빠르다 :

from itertools import islice 

n = 4 
with open('file.txt') as f, open('out.txt', 'w') as out: 
    out.writelines(islice(f, n-1)) #write the lines before the nth line 
    out.writelines(islice(f, 1, None)) #write the rest of the lines except nth 
+0

마지막 줄에'1' 대신'n'이 있어야합니까? – igor

+1

@igor 아니요, 파일 객체가 이미 (n-1) 번째 줄까지 슬라이스되어 있으므로 '1'이어야합니다. 이제 n 번째 라인을 무시하기 위해 두 번째 인덱스 (1)부터 시작해야합니다. –

1
lineToRemove = 7 

f = open("yourfile.txt","r") 
lines = f.readlines() 
f.close() 

f = open("yourfile.txt","w") 
linesInFile = 0 
for line in lines: 
    linesInFile = linesInFile + 1 
    if linesInFile != lineToRemove: 
     f.write(line) 
f.close() 

편집보다는 '특정 문구를 제거 선'대부분입니다 del를 사용하여 생략으로는 명시적인 openclose 코드를 줄일 수 있습니다.

lines = file("yourfile.txt", "r").readlines() 
del lines[6] 
file("yourfile.txt", "w").writelines(lines) 

인덱스가 0으로 시작하므로 del lines[6]은 7 번째 줄을 제거합니다. 따라서 다음과 같이 편리한 함수를 사용할 수 있습니다.

def deleteLine(filename, lineToRemove): 
    lines = file(filename, "r").readlines() 
    del lines[lineToRemove-1] 
    file(filename, "w").writelines(lines) 
+0

감사합니다! 이것은 완벽하게 작동합니다. 그러나이 프로그램은 전체 입력 파일을 읽습니까? 입력 파일의 행 길이가 같습니다. 즉, 모든 행은 동일한 수의 열을가집니다. 그런 다음 모든 행을 읽지 않고 n 번째 행을 제거하지 않을 수 있습니까? – user3123767

+0

이 방법은 어떤면에서 효율적입니까? –

관련 문제