首页  >  问答  >  正文

python csv模块生成CSV文件,0字头数字缺失,汉字乱码

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字头,汉字乱码

天蓬老师天蓬老师2742 天前943

全部回复(2)我来回复

  • PHP中文网

    PHP中文网2017-04-17 17:52:05

    是 Excel 的问题。

    Excel 会自己猜测是否是一个数字列,如果是数字列,默认是会按数字显示(省略0)。
    Excel 默认格式为本地字符集(简体中文版是gbk),它无法自动识别无BOM格式的utf8格式,除非在文件前面加上3字符的BOM头。(在 office 2007 下的某个版本,对有BOM头的utf8文件也有Bug)gbk),它无法自动识别无BOM格式的utf8格式,除非在文件前面加上3字符的BOM头。(在 office 2007 下的某个版本,对有BOM头的utf8文件也有Bug)

    你应该使用文本编辑器(不要用notepad)打开看看里面的内容。


    补充说明下:
    微软家的老牌软件对于utf8无bom文件的支持都很弱。bom头是utf8文件开头加上三个字符(十六进制是EFBBBF),具体可以搜索utf8 bom头
    没有太完美的方案,我列出来你根据情况选择一下:

    1. 如果想保持 utf 编码,可以尝试在文件前加上 Bom 头。(就是写入文件前先写入三字符)

    2. 如果只是给 Excel 使用,并且在大陆使用,你可以直接把文件写成 GBK

      你应该使用文本编辑器(不要用notepad)打开看看里面的内容。

    补充说明下:🎜微软家的老牌软件对于utf8无bom文件的支持都很弱。bom头是utf8文件开头加上三个字符(十六进制是EFBBBF),具体可以搜索utf8 bom头。🎜没有太完美的方案,我列出来你根据情况选择一下:🎜
    1. 🎜如果想保持 utf 编码,可以尝试在文件前加上 Bom 头。(就是写入文件前先写入三字符)🎜🎜
    2. 🎜如果只是给 Excel 使用,并且在大陆使用,你可以直接把文件写成 GBK编码。🎜🎜 🎜

      回复
      0
  • 天蓬老师

    天蓬老师2017-04-17 17:52:05

    我测试的结果:

    id,url,keywords
    0011,http://www.59store.com/,59store.com
    0022,http://59data.top/,59data.top
    0033,http://my.space.zmx/,汉子乱码?

    看起来纯文字 file 没有什么问题,猜测可能是你用来开启 csv 文件的试算表软体造成的. (mac 的 NumbersOpenOffice Calc 都有这个现象)NumbersOpenOffice Calc 都有這個現象)

    比如說,id 欄位的型態如果設為數字,則前面不必要的 0 可能會自動被忽略. 像這一點可以試試看改成純文字型態再開啟.

    P.S. Excel

    比如说,id 栏位的型态如果设为数字,则前面不必要的 0 可能会自动被忽略. 像这一点可以试试看改成纯文字型态再开启.

    P.S. Excel 的部分可以见 玉河CC 大的说明. 🎜 🎜要更精准更细节地处理 xlsx 文件,可以用 XlsxWriter,他能够控制资料的型态(data type),甚至样式(format). 🎜

    回复
    0
  • 取消回复