2017-11-14 16 views
3

Windows에서 Python 3.6.3을 사용하고 있습니다. 이 같은 파일을 단일 여러 문자열을 인쇄하려고 할 때 : 인쇄 또는 쓰기시 멀티 라인 문자열이 변경되는 이유는 무엇입니까? (Windows 용 Python 3.6)

with open('test1.txt', mode='w') as f: 
    f.write('test\r\ntest\r\n') 

그런 다음 test1.txt 대신 test\r\ntest\r\ntest\r\r\ntest\r\r\n을 포함 종료됩니다.

with open('test2.txt', mode='w') as f: 
    for line in 'test\r\ntest\r\n'.splitlines(): 
     print(line, file=f) 

왜 이런 일이 :

해결 방법

원하는 출력과 같이 보일 것이다 얻으려면?

+0

당신은 당신 자신에게'\ r'을 넣어서는 안됩니다. 텍스트 모드는이를 번역합니다. – user2357112

+0

그래, 나는 그렇게해서는 안된다. 필자의 경우,'tablib.tsv'에서 하나의 문자열을 얻습니다. –

+0

왜 데이터를 문자 그대로 쓰고 싶다면'mode = 'wb'' 대신'mode ='w''d? –

답변

1

글쎄, 종종 제대로 질문을 진술 밝혀 자신을 제시 답에 이르게 :

이 동작에 대한 이유는 파이썬의 universal newline (PEP 3116에서 TextIOWrapper에서 인용)이 함께 찾을 수있다 :

을 출력시 newlineNone이면 '\n' 문자는 시스템 기본 줄 구분 기호 os.linesep으로 변환됩니다. 개행 문자가 ''이면 번역이 수행되지 않습니다.. 개행 문자가 다른 유효한 값인 경우 '\n' 문자가 지정된 문자열로 변환됩니다.

with open('test3.txt', mode='w', newline='') as f: 
    f.write('test\r\ntest\r\n') 
(. 번역을 유도 규칙이 입력보다 출력 다르다는 주) 수단

기입하기위한 파일을 열 때, 상기 newline 파라미터는 원하는 출력을 얻기 위해 ''로 설정 될 수있다