파일을 쓸 때 파이썬에서 줄 바꾸기를 어떻게 지정합니까?


313

Java (문자열)와 비교하여 다음과 같은 작업을 수행합니다 "First Line\r\nSecond Line".

그렇다면 파이썬에서 어떻게 여러 줄을 일반 파일에 쓰려고합니까?


12
무엇을 시도 했습니까? 작동 했습니까? (그렇지 않다고 생각하지 않을 것입니다.) 어떻게 되었습니까?
Greg Hewgill

나는 옳고 그른 방법이 있는지 알고 싶었지만 아직 시도하지 않았습니다.
FabianCook

5
파이썬 은 Java에서와 print같이 작동 System.out.println하고 텍스트 뒤에 줄 바꿈을 자동으로 추가 한다는 것을 알고 있습니까?
Greg Hewgill

파일 쓰기를 원합니다 :)
FabianCook

2
printPython 의 명령문을 사용하여 파일에 쓸 수도 있습니다 (자세한 내용은 Python 2.x와 Python 3.x간에 다르므로 해당 버전의 참조 문서를 확인하십시오). print파이썬 2.X에서 - print파이썬 3.x의에서
그렉 Hewgill

답변:


357

얼마나 정확한지에 따라 다릅니다. \n일반적으로 작업을 수행합니다. 정말로 올바르게하고 싶다면 os패키지 에서 개행 문자를 찾으십시오 . (실제로 호출 linesep됩니다.)

참고 : Python API를 사용하여 파일에 쓸 때는를 사용하지 마십시오 os.linesep. 그냥 사용하십시오 \n; 파이썬은이를 자동으로 플랫폼에 적합한 개행 문자로 변환합니다.


14
제공 한 링크에서 "텍스트 모드로 열린 파일을 쓸 때 os.linesep를 줄 종결 자로 사용하지 마십시오 (기본값). 대신 모든 플랫폼에서 단일 '\ n'을 사용하십시오." "올바른"은 무엇을 의미하며 그들의 이유와 의견은 무엇입니까?
Yasen

21
@Yasen : Windows에서 줄 바꿈 순서는 "\r\n"입니다. 이것은임을 의미 os.linesep합니다 "\r\n". 텍스트 모드에서 파일에 쓸 때는 파일을 쓸 때 줄 바꿈 변환을 수행합니다. 즉, "\n"출력의 각각 "\r\n"은 결과 파일 로 변환 됩니다. 작성중인 텍스트에 이미 "\r\n"시퀀스 가 포함 된 경우 이것이 어떻게 문제인지 확인할 수 있습니다 . 결과는 "\r\r\n"모든 줄의 끝에 있습니다 . 최소한, 나는 실제로 시도하지 않았다고 가정합니다.
Nate CK

이미 답변을 수정하고 잘못된 os.linesep제안을 제거해야 할 때가 있습니까? 큰 드라마가 아니고 작가의 자존심은 내가 믿지 못할 것입니다.
ZAB

8
당신은 내 자존심을 모른다. 그러나 더 심각한 linesep것은 시스템 라인 구분 기호가 무엇인지 알 수 있도록 존재하고 존재 한다는 점을 알아 두는 것이 유용하다고 생각합니다 .
Charlie Martin

2
@ZAB 모든 문자열이 텍스트 모드의 파일에 기록되는 것은 아닙니다. linesep여전히 유용 할 수 있습니다.
Kyle Strand

61

줄 바꾸기 문자는 \n입니다. 문자열 내부에서 사용됩니다.

예:

    print('First line \n Second line') 

\n개행 문자는 어디에 있습니까 ?

결과는 다음과 같습니다.

First line
 Second line

Python 2를 사용하는 경우 print 함수에 괄호를 사용하지 마십시오.


7
제안과 마찬가지로 \ n 뒤에 '공백'을주지 않으면 두 번째 줄에 공백이 하나도 생기지 않습니다. 내가 뭘 의미하는 것은 : 인쇄 '첫 선 \ nSecond 라인'
마 노즈 쿠마르

문자열 안에 이스케이프 된 "\ n"문자를 사용하도록 지적 해 주셔서 감사합니다! 나 같은 새로운 Python 아이들에게는 분명하지 않을 수도 있습니다
GrayedFox

3
@ all / anyone / ManojKumar a = 1; b = 2; 인쇄 (a, "\ n", b); o / p : 1 2 (2는 하나의 공백 들여 쓰기가있는 새 줄에 있으며 제대로 보이지 않지만 2와 하나의 공백이 들여 쓰기 된 별도의 줄에 1과 2가 있다고 가정)이 경우 어떻게 whilte 공백을 제거합니까 (1 공백 들여 쓰기)를 2보다 먼저 입력하고 들여 쓰기를합니다.
PRAFUL ANAND

24

새 줄을 개별적으로 또는 단일 문자열 내에 쓸 수 있으므로 더 쉽습니다.

실시 예 1

입력

line1 = "hello how are you"
line2 = "I am testing the new line escape sequence"
line3 = "this seems to work"

'\ n'을 별도로 쓸 수 있습니다.

file.write(line1)
file.write("\n")
file.write(line2)
file.write("\n")
file.write(line3)
file.write("\n")

산출

hello how are you
I am testing the new line escape sequence
this seems to work

실시 예 2

입력

다른 사람들이 이전 답변에서 지적했듯이 \ n을 문자열의 관련 지점에 놓습니다.

line = "hello how are you\nI am testing the new line escape sequence\nthis seems to work"

file.write(line)

산출

hello how are you
I am testing the new line escape sequence
this seems to work

귀하의 출력이 기술적으로 잘못되었다고 생각합니다. 두 번째와 세 번째 줄은 첫 문자 왼쪽에 공백이 하나 있어야합니다. 또 다른 해결책은이 두 공백을 행 변수에서 제거하는 것입니다.
Christian Westbrook

어쨌든 예제 2의 코드는 표시 한 정확한 출력을 생성하지 않습니다.
Christian Westbrook

10

한 번에 여러 줄의 텍스트를 입력하는 경우 가장 읽기 쉬운 형식이라고 생각합니다.

file.write("\
Life's but a walking shadow, a poor player\n\
That struts and frets his hour upon the stage\n\
And then is heard no more: it is a tale\n\
Told by an idiot, full of sound and fury,\n\
Signifying nothing.\n\
")

각 줄의 끝에있는 \는 새 줄을 이스케이프합니다 (오류가 발생 함).


내부 괄호이므로 이스케이프 라인이 필요하지 않습니다. 문자열을 끝내고 새 줄로 이동 한 다음 새 줄을 시작하십시오. 새로운 줄이 추가되지 않으며 탈출 할 필요가 없습니다. 또한 위의 작업을 수행하더라도 줄 바꿈 문자와 이스케이프는 서로를 취소합니다.
user144153

9

파이썬에서는 개행 문자를 사용할 수 있습니다. \n


3
@maazza : 글쓰기에 대한 질문이 아니 십니까?
mhawke

9

가장 간단한 솔루션

print인수없이 만 호출 하면 빈 줄이 출력됩니다.

print

출력을 다음과 같은 파일로 파이프 할 수 있습니다 (예제를 고려하십시오).

f = open('out.txt', 'w')
print 'First line' >> f
print >> f
print 'Second line' >> f
f.close()

OS에 구애받지 않고 ( os패키지 를 사용하지 않아도 ), \n문자열에 넣는 것보다 더 읽기 쉽습니다.

설명

print()함수에는 문자열의 끝에 대한 선택적 키워드 인수가 end있습니다. 예를 들어 OS의 개행 문자가 기본값입니다. \n. 따라서 호출 할 때 print('hello')Python은 실제로 인쇄하고 'hello' + '\n'있습니다. 즉 print, 인수없이 호출하면 실제로 인쇄 '' + '\n'되어 개행이 발생합니다.

대안

여러 줄 문자열을 사용하십시오.

s = """First line
    Second line
    Third line"""
f = open('out.txt', 'w')
print s >> f
f.close()

6

플랫폼 독립적 인 회선 차단기 : Linux, Windows 및 IOS

import os
keyword = 'physical'+ os.linesep + 'distancing'
print(keyword)

산출:

physical
distancing

4

와 같은 방식 '\n'으로을 사용해야 할 수도 '\r'있습니다. Java 버전에 이유가 있습니까? 필요하거나 원하지 않으면 파이썬에서도 같은 방식으로 사용할 수 있습니다.


1
\r캐리지 리턴입니다. 새 줄의 시스템 속성을 가져 오면 다음과 같이 나타납니다.\r\n
FabianCook

4
@SmartLemon : 아마도 Windows에서는 사실이지만 대부분의 다른 시스템 \n에서는 유일한 줄 바꿈 문자입니다.
Greg Hewgill

@ Jean-MichaëlCelerier : 그것은 Mac OS X 이전에 사실이었습니다 \n. Mac OS X는을 사용합니다 .
Greg Hewgill

좋아, 내 의견을 삭제하겠습니다. 그때는 정말 쓸모가 없습니다. 죄송합니다!
Jean-Michaël Celerier

4

\ n-간단한 개행 문자 삽입 작업 :

# Here's the test example - string with newline char:
In [36]: test_line = "Hi!!!\n testing first line.. \n testing second line.. \n and third line....."

# Output:
In [37]: print(test_line)

Hi!!!
 testing first line..
 testing second line..
 and third line.....

2

Java에서 문자열 리터럴의 대부분의 이스케이프 문자는 "\ r"및 "\ n"과 같이 Python에서도 유효합니다.


파이썬과 자바는 C의 영향을 받아이 언어에서 온 것이기 때문입니다. 자세한 내용은 .
Alex.K.

1

다른 답변에서 언급했듯이 "새 줄 문자는 \ n입니다. 문자열 안에 사용됩니다".

가장 간단하고 읽기 쉬운 방법은 nl을 새 줄의 이름으로 사용하여 "format"함수를 사용하고 인쇄하려는 문자열을 인쇄하려는 정확한 형식으로 나누는 것입니다.

print("line1{nl}"
      "line2{nl}"
      "line3".format(nl="\n"))

출력됩니다 :

line1
line2
line3

이렇게하면 작업을 수행하고 코드의 높은 가독성을 제공합니다. :)


0

\ n은 문자열의 줄을 구분합니다. 다음 예제에서는 루프에서 레코드를 계속 작성합니다. 각 레코드는로 구분됩니다 \n.

f = open("jsonFile.txt", "w")

for row_index in range(2, sheet.nrows):

  mydict1 = {
    "PowerMeterId" : row_index + 1,
    "Service": "Electricity",
    "Building": "JTC FoodHub",
    "Floor": str(Floor),
    "Location": Location,
    "ReportType": "Electricity",
    "System": System,
    "SubSystem": "",
    "Incomer": "",
    "Category": "",
    "DisplayName": DisplayName,
    "Description": Description,
    "Tag": tag,
    "IsActive": 1,
    "DataProviderType": int(0),
    "DataTable": ""
  }
  mydict1.pop("_id", None)
  f.write(str(mydict1) + '\n')

f.close()

0

대화 형 파이썬 쉘 또는 Jupyter 노트북을 사용하여 문자열을 검사 할 때 \n와 같은 다른 백 슬래시 문자열 \t문자 그대로 렌더링됩니다 .

>>> gotcha = 'Here is some random message...'
>>> gotcha += '\nAdditional content:\n\t{}'.format('Yet even more great stuff!')
>>> gotcha
'Here is some random message...\nAdditional content:\n\tYet even more great stuff!'

줄 바꿈, 탭 및 기타 인쇄되지 않은 특수 문자는 인쇄 하거나 파일에 쓸 때만 공백으로 렌더링됩니다 .

>>> print('{}'.format(gotcha))
Here is some random message...
Additional content:
    Yet even more great stuff!
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.