2013-10-17 3 views
0

파이썬 3에서 텍스트 파일을 편집하고 편집 한 버전을 새로운 텍스트 파일로 출력하는 프로그램을 작성했습니다. 그러나 새 파일에는 가질 수없는 빈 줄이 있으며 그 파일을 제거하는 방법을 알 수는 없습니다.텍스트 파일 출력에서 ​​빈 줄 제거하기 python 3

미리 감사드립니다.

newData = "" 
i=0 
run=1 
j=0 
k=1 
seqFile = open('temp100.txt', 'r') 
seqData = seqFile.readlines() 

while i < 26: 
sLine = seqData[j] 
editLine = seqData[k] 
tempLine = editLine[0:20] 
newLine = editLine.replace(editLine, tempLine) 
newData = newData+sLine+'\n'+newLine+'\n' 
i=i+1 
j=j+2 
k=k+2 
run=run+1 

seqFile.close() 

new100 = open("new100a.fastq", "w") 
sys.stdout = new100 
print(newData) 
+0

많은 유용한 아무것도하지 않는 것. 예를 들어,'editLine.replace (editLine, tempLine)'은'tempLine' 이외에는 아무것도 줄 수 없습니다. 거기에 뭔가 다른 것을하려고 했습니까? 또한'new100.write'를 호출하는 대신'stdout'을 파일로 쓰는 방향으로 리디렉션하는 이유는 무엇입니까? – abarnert

답변

1

문제는이 라인에있다 : 첫 번째 '\ n을'을 제거해야하므로

newData = newData+sLine+'\n'+newLine+'\n' 

sLine 이미 줄 바꿈 기호가 포함되어 있습니다. newLine의 길이가 20보다 작은 경우 newLine에도 줄 바꿈이 포함됩니다. 다른 경우에는 개행 기호를 추가해야합니다.

이 시도 :이 코드의

newData = newData + sLine + newLine 
if len(seqData[k]) > 20: 
    newData += '\n' 
+0

완벽한! 이것은 정확히 내가 필요로했던 방식으로 작동했습니다. 대단히 감사합니다. –

1

sLine에는 이미 개행 문자가 포함되어 있습니다. newLineeditLine이 길거나 20 자 길이 인 경우 줄 바꿈을 포함합니다. 당신은 당신이 tempLine = editLine[0:20]을 수행 할 때

newData = newData+sLine+'\n'+newLine+'\n'

editLine가 20자를 초과 인 경우

newData = newData+sLine+newLine

에, 후행 줄 바꿈이 차단됩니다 변경할 수 있습니다 당신은을 추가해야합니다 개행 문자는 newData입니다.

은 (readlines 메쏘드에 의해 사용되는) 파이썬 documentation on readline에 따르면, 후행 바꿈 각 라인에서 유지된다

파일에서 하나 개의 전체 행을 읽는다. 후행 줄 바꿈 문자는 문자열에 유지되는 입니다 (그러나 파일이 불완전한 줄로 끝날 때 없을 수 있습니다). [6] 크기 인수가 있고 음수가 아닌 이면 최대 바이트 수 (후행 개행 포함)이며 불완전한 줄이 반환 될 수 있습니다. size가 0이 아닌 경우 EOF가 즉시 발생하는 경우에만 빈 문자열이 반환됩니다.

일반적으로 예기치 않은 동작이 발생할 때 변수 값을 인쇄하여 프로그램을 디버깅하는 데 긴 시간이 소요될 수 있습니다. 예를 들어 sLineprint repr(sLine)으로 인쇄하면 거기에 줄 바꿈 줄이 있음을 알았을 것입니다.

+1

추측 할 필요가 없으며 미확인 된 추측을 기반으로 사물을 변경하여 코드를 디버깅하려는 시도는 초보자가 자신이하는 일을 배우는 좋은 방법이 아닙니다. [the docs] (http://docs.python.org/2/library/stdtypes.html#file.readlines)를 가리키며, 줄 바꿈 줄이 문자열에 저장되어 있다고 분명히 말하거나 확인 방법을 설명하십시오 (예 : , print (repr (seqData [0]))')를 사용하여 그가 무엇을 다루고 있는지 알지 못한다. – abarnert

+0

나는 내 대답에 좀 더 철저 했어야했다. 나는 그것을 지금 새롭게했다. –

+0

좋은 답변입니다. 각 줄을 'rstrip'하고, 줄 바꿈이 잘리는 지 아닌지 알아내는 대신 무조건'\ n'을 추가하는 것이 조금 더 간단 할 수도 있지만 OP가 있어야한다고 설명했습니다. 그가 원하는 문제를 해결할 수 있습니다. – abarnert

관련 문제