본문 바로가기
Computer Science/[20-3,4] Python Basic

[Python] 텍스트 파일을 생성할 때 마지막 행에 \n 안쓰기

by gojw 2020. 3. 11.

문제:

기존 파일에 있는 행의 reverse를 새로운 파일에 저장한다.

 

예시:

original.txt

abc

def

 

new.txt

cda

fed

 

문제 원인:

새로운 텍스트 파일을 작성하는데

# 예시
data = 'Hello World!\n'
newFile.write(data)

# 3번 반복하면 newFile의 내용이
# Hello World!
# Hello World!
# Hello World!
#

 

이런 식으로 반복문을 돌리니까, 줄바꿈 개행문자 (\n) 으로 인해서 마지막 행이 비어있는 행이 나왔다.

 

해결:

enumerate를 이용해서 마지막 행일 때는 개행문자 안쓰기

original = open("original.txt", "r")
# 새로운 파일을 생성한다.
newFile = open("new.txt", 'w')

# 기존 파일의 길이를 구한다.
f = original.readlines()
fileLen = len(f)

for i, line in enumerate(f):
	line = line.rstrip('\n')

	if i == fileLen - 1:
		data = '{0}'.format(line[::-1])
	else:
		data = '{0}\n'.format(line[::-1])
	newFile.write(data)

 

기존 파일행의 reverse를 새로운 파일에 저장하기 위해서,

open()으로 새 텍스트 파일(new.txt)을 생성하고, 기존 파일과 새 파일의 길이가 다르지 않기 때문에

기존 파일의 길이를 구해놓는다. → 몇 번째 행이 마지막 행인지 알 수 있도록.

readlines()는 텍스트 파일 각각의 행을 리스트에 저장한다.

 

f는 리스트이기 때문에 리스트를 인자로 받는 enumerate에 사용할 수 있다.

기존 파일의 내용을 반복하면서, 마지막 행이 되었을 때 (if i == fileLen - 1) 개행문자를 넣지 않는다.

 

더 나은 방법:

original = open("original.txt", "r")
# 새로운 파일을 생성한다.
newFile = open("new.txt", 'w')

for line in original:
    line = line.rstrip('\n')
    print(line + line[::-1], file=newFile)
newFile.close()

print()에 file parameter를 사용하면 개행문자를 쓸 필요없이 자동으로 줄바꿈이 된다.

 

댓글