본문 바로가기

python 파이썬

xml파일에서 개행문자(^M)제거하기

윈도우에서 실행하는 파이썬 프로그램이 xml파일을 저장하고 나서

그 파일을 리눅스에서 vi편집기로 열어보면 줄 마지막에 ^M과 같은 문자가 나온다.

이것은 윈도우와 리눅스의 차이로 인해 발생하는 결과다.

 

OS마다 줄 바꿈에 대한 정의가 다른데

윈도우와 DOS는 줄 바꿈이 CRLF이고,

리눅스와 유닉스(C언어)는 LF만으로 끝난다.

 

여기서 CR과 LF는 또 무언인가?

CR(Carriage Return)은 맨 앞으로 이동(c언어에서의 \r),

LF(Line Feed)은 다음 줄로 이동(바로 아래로 이동하며 다시 맨 앞으로 이동하지는 않음) (c언어에서의 \n)

 

직접 눈으로 확인해보자.

notepad를 설치해서 '보기>기호 보기>줄 끝 표시' 를 선택해주고

아무내용 엔터를 쳐서 몇 줄 입력해본다.

그럼 위와 같이 CR LF로 문장이 끝나는 것을 볼 수 있다.

따라서 윈도우에서 작성한 파일들을 리눅스에서 vi편집기로 열어보면

줄 마지막에 ^M이 보이는 것이다.

 

^M은 상황에 따라서 동작에 영향을 미치기도 그렇지 않기도 한다.

따라서 ^M을 제거해야 한다.

 

파이썬의 경우 아래와 같이 파일을 읽어 들인 후

replace를 이용하여 각 줄을 바꿔주면 된다. 

 

1
2
3
4
5
6
7
8
9
10
11
WINDOWS_LINE_ENDING = b'\r\n'
UNIX_LINE_ENDING = b'\n'
 
file_path = "./file.txt"

 
with open(file_path, 'rb'as open_file:
    content = open_file.read()
    content = content.replace(WINDOWS_LINE_ENDING, UNIX_LINE_ENDING)
 
with open(file_path, 'wb'as open_file:
    open_file.write(content)
cs

 

위 스크립트를 이용하여 변경한 뒤 파일을 다시 열어보면 아래와 같이 바뀌어 있을것이다.