python CSV模块 写入CSV文件时,0开头的数字会丢失
# _*_ coding:utf-8 _*_
#win7+python2.7.x
import csv
csvfile = file('csvtest.csv', 'wb')
writer = csv.writer(csvfile)
writer.writerow(['id', 'url', 'keywords'])
data = [
('0011', 'http://www.59store.com/', '59store.com'),
('0022', 'http://59data.top/', '59data.top'),
('0033', 'http://my.space.zmx/', '汉子乱码?')
]
writer.writerows(data)
csvfile.close()
写入CSV时会丢失0字头,汉字乱码
これは Excel の問題です。
Excel は数値列かどうかを推測します。数値列の場合は、デフォルトで数値で表示されます (0 は省略されます)。
Excel のデフォルトの形式はローカル文字セットです (簡体字中国語バージョンは
gbk
)。ファイルの前に 3 文字の BOM ヘッダーが追加されない限り、BOM 形式のないutf8
形式は自動的に認識されません。 。 (Office 2007 の特定のバージョンでは、BOM ヘッダーを持つutf8
ファイルにもバグがあります)テキストエディター (
notepad
ではありません) で開き、内容を確認してください。追加説明:
Microsoft の古いソフトウェアは、BOM のない UTF8 ファイルのサポートが不十分です。 bom ヘッダーは、utf8 ファイルの先頭に 3 文字を加えたものです (16 進数は
EFBBBF
)。具体的にはutf8 bom头
を検索できます。完璧な解決策はありません。状況に応じて選択できるようにリストを示します。
utf
エンコーディングを維持したい場合は、ファイルの前にBom
ヘッダーを追加してみてください。 (つまり、ファイルに書き込む前に 3 文字を書き込みます)Excel のみで中国本土で使用される場合は、ファイルを
GBK
エンコードで直接書き込むことができます。私のテストの結果:
リーリープレーン テキスト ファイルには何も問題がないようですが、CSV ファイルを開くために 使用したスプレッドシート ソフトウェア が原因である可能性があります。 (Mac の
Numbers
とOpenOffice Calc
の両方でこの現象が発生します)たとえば、id フィールドの型が数値に設定されている場合、先頭にある不要な 0 は自動的に無視されることがあります。 このように、プレーンテキストに変更してからオンにしてみてください。
追記
Excel
の部分は Yuhe CC の説明書にあります。xlsx ファイルをより正確かつ詳細に処理するには、データ型 (データ型) と形式 (フォーマット) さえも制御できる XlsxWriter を使用できます。