python做工具遇到报错:[Errno 22] invalid mode ('rb') or filename

最近工作需要,做一个策划excel配置表导出lua配置的工具,用python做的。首先就踩了python中文编码的坑,估计不少人都会遇到,encode和decode的问题:python中,str是字节串,unicode是字符串,字节串decode解码成为字符串,而字符串encode编码成为字节串,一旦用错,诸如下图的报错就会让人痛不欲生:

python做工具遇到报错:[Errno 22] invalid mode ('rb') or filename_第1张图片

特别是windows开发,中文编码的问题是一个梗。要知道有些工具是utf8编码,而有些则是gbk编码,如何转换是个大难题。所幸,遇到了AstralWind的这篇文章:http://www.cnblogs.com/huxi/archive/2010/12/05/1897271.html 整个看完基本可以科普一下中文编码相关的基础知识。


言归正传,现在遇到的这个问题比较奇怪,报错如下:

python做工具遇到报错:[Errno 22] invalid mode ('rb') or filename_第2张图片


开始以为是读写权限问题,最后发现配置表文件名最后多了个空格,o(╯□╰)o,去掉文件名的空格之后可以正常导出:

python做工具遇到报错:[Errno 22] invalid mode ('rb') or filename_第3张图片

罪魁祸首就是excelData = xlrd.open_workbook(filePath)这句代码,这工具是支持所有文件导出(用os.listdir(dirPath)去搜索目录结构下所有文件)及单个文件导出(单个文件的路径是直接将文件拖到控制台中获取的,也就是该文件的绝对路径,但是会是单斜杠的路径,没有用转义),但奇怪的是,单个文件导出,文件名有空格的文件会出问题,而所有文件批量导出是没问题的。二者操作不同导致传入到xlrd.open_workbook中的路径不同,所以批量导出的时候是没问题的,而单个文件导出是有问题的。当然,为了方便起见,我也已经强烈要求策划改配置表的文件名,不允许粗线空格了……^_^

你可能感兴趣的:(python)