>  기사  >  백엔드 개발  >  Python에서 CSV에 작성된 문자가 깨졌을 때 발생하는 문제를 해결하는 방법

Python에서 CSV에 작성된 문자가 깨졌을 때 발생하는 문제를 해결하는 방법

WBOY
WBOY원래의
2016-12-05 13:27:141227검색

요구사항 배경

최근 회사를 위한 이메일 일일 프로그램이 개발되었습니다. 이메일은 일반적으로 표, 사진, 첨부 파일로 구성됩니다. 첨부파일은 기본적으로 txt 파일로 작성되는 것이 일반적인데, PM은 이메일에 포함된 첨부파일을 엑셀 등의 소프트웨어로 바로 열 수 있기를 희망한다. 엑셀이 몇배는 더 클텐데, csv 파일은 기본으로 되어있습니다. 엑셀로도 열었는데, 그래도 텍스트 파일이라 크기도 작고 저장도 쉬웠기 때문에 결국 csv 모듈을 이용해서 파일을 저장하기로 했습니다.

Python으로 csv 파일 쓰기

Python은 csv 파일을 읽고 쓸 수 있는 모듈을 제공합니다. 여기서는 쓰기만 사용합니다. 주요 목적은 문자 깨짐 문제를 해결하는 것입니다.

def save2csv(file_name=None, header=None, data=None):
"""
保存成CSV格式文件,方便Excel直接打开
:param file_name: 保存的文件名
:param header: 表头,每一列的名字
:param data: 具体填充数据
:return:
"""
if file_name is None or isinstance(file_name, basestring) is False:
raise Exception('保存CSV文件名不能为空,并且必须为字符串类型')
if file_name.endswith('.csv') is False:
file_name += '.csv'
file_obj = open(file_name, 'wb')
file_obj.write(codecs.BOM_UTF8) # 防止乱码
writer = csv.writer(file_obj)
if data is None or isinstance(data, (tuple, list)) is False:
raise Exception('保存CSV文件失败,数据为空或者不是数据类型')
if header is not None and isinstance(header, (tuple, list)) is True:
writer.writerow(header)
for row in data:
writer.writerow(row)

참고: 글자 깨짐을 방지하기 위해 세 가지 문장이 있습니다

file_obj = open(file_name, 'wb')
file_obj.write(codecs.BOM_UTF8) # 防止乱码
writer = csv.writer(file_obj)

파일 헤더에 codecs.BOM_UTF8을 작성하면 파일이 모두 UTF-8 인코딩 형식으로 되어 있습니다.

읽어주셔서 감사합니다. 모두에게 도움이 되기를 바랍니다. 이 사이트를 지원해 주셔서 감사합니다!

성명:
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.