常用接口
- os.chdir(os.path.dirname(os.path.abspath(sys.argv[0]))) #定位工作目录为当前目录
- root_path = '.'+os.sep #os.sep 系统无关分隔符
- raw_input('\nPress Enter to exit:') #等待输入回车结束运行
Python之Excel文件操作
python对Excel文件的操作需要借助xlrd、xlwt、xlutils,这三个包非自带,需要另行安装。
- xlrd、xlwt、xlutils需要另外下载安装才可以import使用,分别下载源码xlrd-1.1.0.tar.gz 及xlrd-1.1.0-py2.py3-none-any.whl 解压到python安装的根目录,运行如下命令安装:
python setup.py install
pip install xxx.whl
- xlwt 写操作
import xlwt
def xlwt_test():
# 创建一个Workbook对象,这就相当于创建了一个Excel文件
# encoding:设置字符编码,默认是ascii。
# style_compression:表示是否压缩,不常用。
book = xlwt.Workbook(encoding='utf-8', style_compression=0)
# 创建一个sheet对象,一个sheet对象对应Excel文件中的一张表格。
# 其中的test是这张表的名字,cell_overwrite_ok,表示是否可以覆盖单元格,默认值是False
sheet = book.add_sheet('test', cell_overwrite_ok=True)
# 向表test中添加数据
# 其中的'0-行, 0-列'指定表中的单元,'EnglishName'是向该单元写入的内容
sheet.write(0, 0, 'EnglishName')
sheet.write(1, 0, 'Marcovaldo')
# 最后,将以上操作保存到指定的Excel文件中
# 在字符串前加r,声明为raw字符串,这样就不会处理其中的转义了。否则,可能会报错
book.save('test1.xls')
pass
- xlrd 读操作
import xlrd
def xlrd_test():
xlsfile = r"20180102(W1).xlsx"# 打开指定路径中的xls文件
book = xlrd.open_workbook(xlsfile)#得到Excel文件的book对象,实例化对象
sheet_names = book.sheet_names()
for sheet_name in sheet_names:
sheet = book.sheet_by_name(sheet_name)
print(sheet.name,sheet.nrows,sheet.ncols)
pass
- xlutils.copy 改写操作
xlutils.copy是将一个只读的excel文件转换成可写的文件。
import xlrd
from xlutils.copy import copy
def xlutils_copy_test():
xlsfile = r"20180102(W1).xlsx"
rd_book = xlrd.open_workbook(xlsfile, formatting_info=True) #formatting_info 保留格式
wt_book = copy(rd_book)
wt_sheet = wt_book.get_sheet(0)
wt_sheet.write(0, 0, 'name')
wt_sheet.write(0, 1, 'age')
wt_book.save(xlsfile)
pass
-
中文编译问题
需要转换成utf-8编码:
a、文件头增加 # -- coding:utf-8 --
b、文件编码格式也需要转换成utf-8编码 -
formatting_info=True not yet implemented
Excel文件往往会夹杂着各种格式、各种规则、各种宏,我们对其操作时一般都需要保留这些格式,xlrd提供了formatting_info参数解决这个问题。该参数默认为False(即默认会去除所有格式),如下使用:
rdbook = xlrd.open_workbook(file, formatting_info=True)
但是当对新版本的xlsx格式Excel文件进行如上操作时,直接抛出异常:
NotImplementedError: formatting_info=True not yet implemented
这是因为formatting_info还没有对新版本的xlsx的格式完成兼容。那么我们如何来保留这些格式呢?其实我们只要将xlsx另存为xls格式即可。 -
TypeError: 'str' does not support the buffer interface
在Python34上会报如下错误:
源码:
with open(log_file, 'rb') as f:
data = f.readlines()
i = 0
for line in data[::1]:
if ': error: ' in line:
……
运行报错:
if ': error: ' in line:
TypeError: 'str' does not support the buffer interface
网上查找,都描述是编码问题(utf-8),这里将line改为 str(line) 即可。
网友评论