在做统计的时候,经常会用到excel表格,这个可以用写入csv文件来完成
但这个有一些缺陷:数字在大于15位之后,后面的数字在excel打开时,会被自动转换为0
解决方法是:在写入前将数字转换为字符串,即在前后加上单引号,如:'873583789578397439847'
还有要注意的是,为了与windows兼容,不乱码,写入前,应该写入这几个字符: \xEF\xBB\xBF
在python中,有一个模块叫做csv,可以很方便的写csv文件,可以按行写,也可以传入一个字典写
1,按行写
#! /usr/bin/python
#-*- coding:utf-8 -*-
#Filename: writecsv.py
#Author: xiaobing
#E-mail: xiaobingzhang29@gmail.com
#Date: 2013-11-02
#Description:
import csv
def getSortedValues(row):
sortedValues = []
keys = row.keys()
keys.sort()
for key in keys:
sortedValues.append(row[key])
return sortedValues
rows = [{'Column1': '0', 'Column2': '1', 'Column3': '2', 'Column4': '3'},
{'Column1': '0', 'Column2': '1', 'Column3': '2', 'Column4': '3'},
{'Column1': '0', 'Column2': '1', 'Column3': '2', 'Column4': '3'},
{'Column1': '0', 'Column2': '1', 'Column3': '2', 'Column4': '3'},
{'Column1': '0', 'Column2': '1', 'Column3': '2', 'Column4': '3'}]
fieldnames = {'Column1':'栏目1', 'Column2':'栏目2', 'Column3':'栏目3', 'Column4':'栏目4'}
csvFile = '/home/xiaobing/workspace/python/test/csvFile.csv'
fileobj = open(csvFile, 'wb')
#先写入几个字符,防止windows乱码
fileobj.write('\xEF\xBB\xBF')
writer = csv.writer(fileobj)
#先写入头信息
sortedValues = getSortedValues(fieldnames)
writer.writerow(sortedValues)
#将数据逐行写入
for row in rows:
sortedValues = getSortedValues(row)
writer.writerow(sortedValues)
2.字典写入
#! /usr/bin/python
#-*- coding:utf-8 -*-
#Filename: writecsv.py
#Author: xiaobing
#E-mail: xiaobingzhang29@gmail.com
#Date: 2013-11-02
#Description:
import csv
rows = [{'Column1': '0', 'Column2': '1', 'Column3': '2', 'Column4': '3'},
{'Column1': '0', 'Column2': '1', 'Column3': '2', 'Column4': '3'},
{'Column1': '0', 'Column2': '1', 'Column3': '2', 'Column4': '3'},
{'Column1': '0', 'Column2': '1', 'Column3': '2', 'Column4': '3'},
{'Column1': '0', 'Column2': '1', 'Column3': '2', 'Column4': '3'}]
fieldnames = {'Column1':'栏目1', 'Column2':'栏目2', 'Column3':'栏目3', 'Column4':'栏目4'}
csvFile = '/home/xiaobing/workspace/python/test/csvFile.csv'
fileobj = open(csvFile, 'wb')
#先写入几个字符,防止windows乱码
fileobj.write('\xEF\xBB\xBF')
dict_writer = csv.DictWriter(fileobj,fieldnames = fieldnames.keys())
#将头信息加入第一行
rows.insert(0, fieldnames)
#多行写入
dict_writer.writerows(rows)