2017-05-12 27 views
1

我使用以下代碼將一堆.xls文件分解爲.csv文件。當代碼在Linux上運行正常時,Windows上的編碼錯誤

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("..") 

此作品不夠好我的機器(Ubuntu的16),但是,當我的同齡人在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 -*-到文件的頭部沒有任何效果。

我很樂意提供給我良好的跨平臺性能以及對問題的任何見解的任何建議。

+2

的編碼規範是Python的源文件,並有無關,而寫入CSV文件你得到的錯誤。如果要在Python 3中將UTF-8編碼文本寫入文件,則在打開文件時必須明確請求'encoding ='utf-8'。否則,您將獲得默認的區域設置編碼。對於Windows,您可以看到這是您的系統語言環境的ANSI代碼頁,1252. – eryksun

+0

@eryksun您應該寫爲答案... – Aaron

+0

確實如此。 – kpie

回答

1

13號線需要閱讀

 with open(inputFile+".folder"+"/sheet"+str(k)+".csv", 'w', encoding="utf-8") as f: 
相關問題