윈도우에서 실행하는 파이썬 프로그램이 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 |
위 스크립트를 이용하여 변경한 뒤 파일을 다시 열어보면 아래와 같이 바뀌어 있을것이다.
