programing

Windows에서 캐리지 리턴을 추가하는 Python의 CSV

nicegoodjob 2023. 1. 16. 20:16
반응형

Windows에서 캐리지 리턴을 추가하는 Python의 CSV

import csv

with open('test.csv', 'w') as outfile:
    writer = csv.writer(outfile, delimiter=',', quoting=csv.QUOTE_MINIMAL)
    writer.writerow(['hi', 'dude'])
    writer.writerow(['hi2', 'dude2'])

위의 코드는 파일을 생성합니다.test.csv(추가 포함)\r각 행에 다음과 같이 표시됩니다.

hi,dude\r\r\nhi2,dude2\r\r\n

예상과는 달리

hi,dude\r\nhi2,dude2\r\n

왜 이런 일이 일어나는 거죠?아니면 이게 바람직한 행동일까요?

Python 3:

공식 문서에서는 다음을 권장하고 있습니다.open파일 입력newline=''모든 플랫폼에서 범용 줄 바꿈 변환을 비활성화합니다.

with open('output.csv', 'w', newline='', encoding='utf-8') as f:
    writer = csv.writer(f)
    ...

CSV 라이터는, 각 행의 끝에 사투리를 붙입니다.'\r\n'디폴트일 경우excelRFC 4180에서 권장하고 있는 언어이기 때문에 모든 플랫폼에서 사용됩니다.


Python 2:

Windows 에서는, 항상 바이너리 모드로 파일을 엽니다."rb"또는"wb")에 전달하기 전에csv.reader또는csv.writer.

파일은 텍스트 파일이지만 CSV는 관련 라이브러리에 의해 바이너리 형식으로 간주됩니다.\r\n레코드를 분리하다이 구분 기호가 텍스트모드로 작성되면 Python 런타임으로 대체됩니다.\n와 함께\r\n, 그 때문에,\r\r\n이 파일에서 관찰되었습니다.

의 답변을 참조해 주세요.

@john-machin은 좋은 대답을 하지만 항상 최선의 방법은 아니다.예를 들어 모든 입력을 CSV 라이터로 인코딩하지 않으면 Python 3에서 작동하지 않습니다.또한 스크립트가 스트림으로 sys.stdout을 사용하는 경우에도 이 문제는 해결되지 않습니다.

라이터를 작성할 때 대신 '리미네이터' 속성을 설정하는 것이 좋습니다.

import csv
import sys

doc = csv.writer(sys.stdout, lineterminator='\n')
doc.writerow('abc')
doc.writerow(range(3))

이 예는 Python 2 및 Python 3에서 작동하며 불필요한 줄바꿈 문자를 생성하지 않습니다.단, 바람직하지 않은 줄 바꿈(Unix 운영체제시스템에서는 LF 문자를 생략)이 발생할 수 있습니다.

그러나 대부분의 경우 모든 CSV를 바이너리 형식으로 취급하는 것보다 동작이 더 바람직하고 자연스럽다고 생각합니다.검토의 대안으로 이 답변을 드립니다.

Python 3(Python 2에서는 시도하지 않았습니다)에서는, 간단하게 할 수도 있습니다.

with open('output.csv','w',newline='') as f:
    writer=csv.writer(f)
    writer.writerow(mystuff)
    ...

참조해 주세요.

상세한 것에 대하여는, 다음의 문서를 참조해 주세요.

newline="을 지정하지 않으면 따옴표로 묶인 필드 내에 포함된 새 행이 올바르게 해석되지 않으며, \r\n 행 쓰기를 사용하는 플랫폼에서는 \r이 추가됩니다.CSV 모듈은 자체(범용) 뉴라인 처리를 수행하므로 항상 newline='을 지정하는 것이 안전합니다.

csv writer 명령에 lineterminator='\n' 매개 변수를 입력할 수 있습니다.

import csv
delimiter='\t'
with open('tmp.csv', '+w', encoding='utf-8') as stream:
    writer = csv.writer(stream, delimiter=delimiter, quoting=csv.QUOTE_NONE, quotechar='',  lineterminator='\n')
    writer.writerow(['A1' , 'B1', 'C1'])
    writer.writerow(['A2' , 'B2', 'C2'])
    writer.writerow(['A3' , 'B3', 'C3'])

다음과 같이 함수를 열려면 newline="\n" 속성을 추가해야 합니다.

with open('file.csv','w',newline="\n") as out:
    csv_out = csv.writer(out, delimiter =';')

DictWriter를 사용하면 열려 있는 함수의 새 행과 writerow 함수의 새 행이 생성됩니다.열린 기능 내에서 newline='을 사용하여 추가 줄바꿈을 제거할 수 있습니다.

언급URL : https://stackoverflow.com/questions/3191528/csv-in-python-adding-an-extra-carriage-return-on-windows

반응형