Python에서 범용 줄바꿈(universal newline) 지원이 활성화된 상태로 open() 함수를 호출할 때, mode 매개변수에 "U"를 지정하면 "범용 줄바꿈 해석 방식으로 읽기 전용 텍스트 파일 열기"라는 의미가 됩니다.
이 기능이 필요한 이유는 운영체제마다 줄바꿈을 표현하는 방식이 다르기 때문입니다. Unix나 Linux 계열 운영체제에서는 줄바꿈이 한 문자(\n)로 표현되는 반면, Windows에서는 두 문자(\r\n)로 표현됩니다.
'U' 모드로 파일을 열면 read(), readline() 등 다양한 파일 메서드가 반환하는 문자열에서 모든 줄바꿈 표기법이 자동으로 "\n"으로 통일되어 변환됩니다. 덕분에 어떤 운영체제에서 만들어진 텍스트 파일이든 동일한 방식으로 처리할 수 있어 크로스 플랫폼 호환성이 확보됩니다.
예제
예를 들어 Windows에서 아래와 같은 내용을 담고 있는 파일이 있다고 가정해 보겠습니다.
Hello\r\nworld
이 파일을 'U' 수정자를 사용해 Python으로 열고 읽어 보겠습니다.
with open('hello.txt', 'rU') as f:
print(f.read())실행 결과
위 코드를 실행하면 다음과 같은 출력을 얻게 됩니다.
Hello\nworld
원본 파일의 줄바꿈이 \r\n이었음에도 불구하고, 읽어 들인 문자열에서는 \n으로 변환된 것을 확인할 수 있습니다.
참고: Python 3에서의 변경 사항
Python 3에서는 텍스트 모드로 파일을 열 때 기본적으로 범용 줄바꿈이 적용되므로 별도로 'U' 수정자를 지정할 필요가 없습니다. 실제로 'U' 문자는 Python 3에서 폐기(deprecated)되었으며, Python 3.11부터는 'U'를 지정하면 ValueError가 발생합니다. 따라서 최신 Python 버전에서는 일반적인 'r' 또는 'rt' 모드를 사용하면 됩니다.