ホームページ  >  記事  >  バックエンド開発  >  PythonでCSV文字化けを生成する問題の解決策

PythonでCSV文字化けを生成する問題の解決策

高洛峰
高洛峰オリジナル
2017-03-16 16:11:401578ブラウズ

需要の背景

最近、会社用に毎日の電子メール プログラムを開発しました。電子メールは通常、フォーム写真、そして添付ファイルです。通常、添付ファイルはデフォルトで txt ファイルに書き込まれますが、PM は、電子メールの添付ファイルを Excel などのソフトウェアで直接開くことができることを希望していました。最初は Excel で保存したいと考えていましたが、ファイル サイズが大きくなってしまうと考えました。 Excel は何倍も大きくなり、デフォルトの csv ファイルも Excel を使用して開かれましたが、それでもサイズが小さく、保存が簡単だったので、最終的に 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)

注意:文字化けを防ぐための文は3つあります

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

文字化けを防ぐために、ファイルのヘッダーに codecs.BOM_UTF8 を記述します ファイルはすべて UTF-8 エンコード形式です

以上がPythonでCSV文字化けを生成する問題の解決策の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。