티스토리 뷰

728x90

안녕하세요. 개발개입니다.

 

이번 글에서는 Python으로 CSV 또는 TSV 쓰기 작업

공백줄(빈 줄)이 행마다 자동 생성 되는 문제를 해결하는 방법에 대해 알아보도록 하겠습니다.

 

오타, 오류 혹은 기타 의견은 언제든지 환영합니다.

 

 You can also read this post in Enlish via the link below : 

[EN/PYTHON] - [PYTHON3] How to get rid of blank lines between rows (for csv.writer)

 

 

 


 

 

개발환경
Windows 10
python 3.6.4

 

문제 상황

Windows 환경에서 csv.writer를 통해 파일 tsv 파일 생성 시,

매 행마다 추가적으로 공백줄(빈줄)이 생성되는 상황 (csv도 동일)

 

문제 소스

from datetime import datetime
import json
import csv
import os

# tsv파일에 들어갈 샘플 데이터
head = [
        "Seq",
        "Name",
        "Kind",
        "Colour"
    ]
body = [
        [1, "Apple", "Fruit", "Red"],
        [2, "Banana", "Fruit", "Yellow"],
        [3, "Caterpillar", "Insect", "Green"],
        [4, "Dear", "Animal", "Brown"],
        [5, "Elephant", "Animal", "Grey"]
    ]

# 디렉토리 및 파일명 설정
filename = os.path.join("D:/blank.tsv")

# tsv 파일 쓰기
with open(filename, "w") as result_file :

    # delimiter를 '\t'로 설정한 csv.writer는 tsv 파일을 의미함
    tsv_writer = csv.writer(result_file, delimiter='\t')

    ## 헤더 붙이기
    tsv_writer.writerow(head)

    ## 바디 붙이기
    for row in body :
        tsv_writer.writerow(row)

 

문제점

해당 문제는 csv.writer를 Windows 운영체제에서 사용할 때 발생합니다.

 

csv.writer는  \r\n 을 파일에 쓰게되는데,

바이너리 모드가 아닌 경우 Windows는  \n 을  \r\n 으로 치환하므로

결과적으로  \r\r\n 이 되기 때문입니다.

 

 

728x90

 

해결 방법

with open(filename, "w") as result_file :

이 부분을 아래와 같이 newline=""을 추가한 내용으로 수정합니다

with open(filename, "w", newline="") as result_file :

 

수정 소스

from datetime import datetime
import json
import csv
import os

# tsv파일에 들어갈 샘플 데이터
head = [
        "Seq",
        "Name",
        "Kind",
        "Colour"
    ]
body = [
        [1, "Apple", "Fruit", "Red"],
        [2, "Banana", "Fruit", "Yellow"],
        [3, "Caterpillar", "Insect", "Green"],
        [4, "Dear", "Animal", "Brown"],
        [5, "Elephant", "Animal", "Grey"]
    ]

# 디렉토리 및 파일명 설정
filename = os.path.join("D:/no_blank.tsv")

# tsv 파일 쓰기
with open(filename, "w", newline="") as result_file :

    # delimiter를 '\t'로 설정한 csv.writer는 tsv 파일을 의미함
    tsv_writer = csv.writer(result_file, delimiter='\t')

    ## 헤더 붙이기
    tsv_writer.writerow(head)

    ## 바디 붙이기
    for row in body :
        tsv_writer.writerow(row)

 

수정 결과

 

 


 

본 글은 다음을 참고하여 작성되었습니다.

 

python2의 경우 다음 링크를 참고하세요.

https://sopython.com/canon/97/writing-csv-adds-blank-lines-between-rows/

 

Writing CSV adds blank lines between rows - sopython

The way Python handles newlines on Windows can result in blank lines appearing between rows when using csv.writer. In Python 2, opening the file in binary mode disables universal newlines and the data is written properly. with open('/pythonwork/thefile_sub

sopython.com

 

728x90

'KR > Python' 카테고리의 다른 글

[Python] 2차원 배열 생성/초기화 주의사항  (0) 2021.05.04
[Python] 수열 구현하기  (0) 2021.05.03
[Python] 3 6 9 게임 구현하기  (4) 2021.05.03
Total
Today
Yesterday
«   2024/05   »
1 2 3 4
5 6 7 8 9 10 11
12 13 14 15 16 17 18
19 20 21 22 23 24 25
26 27 28 29 30 31
05-03 15:51