我使用以下代码将一堆.xls文件分解为.csv文件。
import sys
import os
import xlrd
def explode(inputFile):
try:
os.mkdir(inputFile+".folder")
except OSError:
chill = None
with xlrd.open_workbook(inputFile) as wb:
for k in range(0,wb.nsheets):
sh = wb.sheet_by_index(k) # or wb.sheet_by_name('name_of_the_sheet_here')
with open(inputFile+".folder"+"/sheet"+str(k)+".csv", 'w') as f:
ret = ""
for r in range(sh.nrows):
for col in sh.row_values(r):
try:
ret+=str(col)+","
except UnicodeEncodeError:
ret+=","
ret = ret[:-1]
ret+="\n"
ret = ret[:-1]
f.write(ret)
dataDir = sys.argv[1]
os.chdir(dataDir)
Files = [name for name in os.listdir(".") if not os.path.isdir(name)]
for k in Files:
explode(k)
os.chdir("..")
这在我的机器(Ubuntu16)上运行得很好,但是当我的同事在Windows上运行代码时,他们会得到以下错误…
Traceback (most recent call last):
File "xlsToCsv.py", line 35, in <module>
explode(k)
File "xlsToCsv.py", line 25, in explode
f.write(ret)
File "C:\Users\AUser\Anaconda3\lib\encodings\cp1252.py", line 19, in encode
return codecs.charmap_encode(input,self.errors,encoding_table)[0]
UnicodeEncodeError: 'charmap' codec can't encode character '\ufb01' in position 64253: character maps to <undefined>
我已经试过将
# -*- coding: utf-8 -*-
行添加到文件头,但没有效果。我希望任何建议,给我良好的跨平台性能和任何洞察的问题是赞赏的!
最佳答案
第13行需要阅读
with open(inputFile+".folder"+"/sheet"+str(k)+".csv", 'w', encoding="utf-8") as f:
关于python - 当代码在Linux上运行正常时,Windows上的编码错误,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/43944291/