发布于 5年前

如何用python读取和生成excel文件

处理 excel 文件是在工作中经常用到的,python 为我们考虑到了这一点,python 中本身就自带 csv 模块。

1.用 python 读取 csv 文件:

csv 是逗号分隔符格式,一般我们用的 execl 生成的格式是 xlsxlsx 直接重命名为 csv 的话会报错:Error: line contains NULL byte

出错原因是直接是把后缀为 xlsexecl 文件重命名为 csv 的, 正常的要是另存为 csv 文件 就不会报错了,譬如我们有这么个 csv 文件:

#!/usr/bin/env python
# -*- coding:utf-8 -*-

import csv
with open('egg.csv','rb') as f:
reader = csv.reader(f)
for row in reader:
print row

打印出来是这样的

['a', '1', '1', '1']
['a', '2', '2', '2']
['b', '3', '3', '3']
['b', '4', '4', '4']
['b', '5', '5', '5']
['b', '6', '6', '6']
['c', '7', '7', '7']
['c', '8', '8', '8']
['c', '9', '9', '9']
['c', '10', '10', '10']
['d', '11', '11', '11']
['e', '12', '12', '12']
['e', '13', '13', '13']
['e', '14', '14', '14']

2.用python写入并生成csv

#!/usr/bin/env python
# -*- coding:utf-8 -*-

import csv
with open('egg2.csv', 'wb') as csvfile:
spamwriter = csv.writer(csvfile, delimiter=' ',quotechar='|', quoting=csv.QUOTE_MINIMAL)
spamwriter.writerow(['a', '1', '1', '2', '2'])
spamwriter.writerow(['b', '3', '3', '6', '4'])
spamwriter.writerow(['c', '7', '7', '10', '4'])
spamwriter.writerow(['d', '11','11','11', '1'])
spamwriter.writerow(['e', '12','12','14', '3'])

这样存进去的是存到一列了,跟我们原本意图存进5列不一样

使用 pythoncsv 生成 excel 所兼容的 csv 文件的话,主要就是创建 writer 时的参数时要有 dialect='excel'

代码修改为:

#!/usr/bin/env python
# -*- coding:utf-8 -*-

import csv
with open('egg2.csv', 'wb') as csvfile:
spamwriter = csv.writer(csvfile,dialect='excel')
spamwriter.writerow(['a', '1', '1', '2', '2'])
spamwriter.writerow(['b', '3', '3', '6', '4'])
spamwriter.writerow(['c', '7', '7', '10', '4'])
spamwriter.writerow(['d', '11','11','11', '1'])
spamwriter.writerow(['e', '12','12','14', '3'])
©2020 edoou.com   京ICP备16001874号-3