在Windows上使用bat调用python脚本时出现报错、乱码
Python脚本内容是将excel转为csv
xlsx_to_csv.py
# -*- coding: gbk -*- import codecs import json import xlrd import datetime import csv import sys reload(sys) sys.setdefaultencoding(‘gbk‘) print sys.getdefaultencoding() def xlsx_to_csv(): filename=‘E:\workspaces\test测试.xlsx‘ workbook = xlrd.open_workbook(filename)
# with codecs.open(‘fcc.csv‘, ‘w‘, encoding=‘utf-8‘) as f: # write = csv.writer(f) # for row_num in range(table.nrows): # row_value = table.row_values(row_num) # write.writerow(row_value) sheet_names=workbook.sheet_names() for i in range(len(sheet_names)): table = workbook.sheet_by_index(i) for row_num in range(0,table.nrows): row_value = table.row_values(row_num) # print row_value print sheet_names[i],",",json.dumps(row_value, ensure_ascii=False, encoding=‘utf-8‘) # print str(row_value).encode(‘GB2312‘) .decode(‘unicode_escape‘) if __name__ == ‘__main__‘: xlsx_to_csv()
三处编码相关设置:
1、指定文件编码
# -*- coding: gbk -*-
2、更改系统默认编码
sys.setdefaultencoding(‘gbk‘)
3、json.dumps 序列化时对中文默认使用的ascii编码, print json.dumps(row_value
)
输出unicode编码的结果
print json.dumps(row_value,ensure_ascii=False)
不使用ascii编码,而以gbk编码 。
以下encoding指定为”utf-8"/"gbk"都可以。
json.dumps(row_value, ensure_ascii=False, encoding=‘utf-8‘)
不同配置下:
乱码: ["鐗硅壊", "瀛楁1", "瀛楁2", "瀛楁3", "瀛楁4", "瀛楁5", "瀛楁6"]
乱码:["\u7279\u8272", "\u5b57\u6bb51", "\u5b57\u6bb52", "\u5b57\u6bb53", "\u5b57\u6bb54", "\u5b57\u6bb55"]
报错:UnicodeEncodeError: ‘ascii‘ codec can‘t encode characters in position 25-32: ordinal not in range(128)
xlsx_to_csv.bat
@echo off for /f "delims=" %%i in (‘D:\python\Python27\python.exe "E:\workspaces\xlsx_to_csv.py"‘) do echo %%i
原文:https://www.cnblogs.com/sunttt/p/14959878.html