我使用以下代码将一堆.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/

10-11 22:49
查看更多