将带有特殊字符的Excel工作表输出为CSV

我有一个Excel文件与多个工作表。 我想从文件中获取一个特定的工作表,并将其保存为一个CSV文件,用逗号分隔(我还没有得到这个)。 工作表中包含特殊字符的数据与右下方的最后一列相似。 我不介意忽略这些字符。

**DateStamp Country ComputerName Domain IPAddress OperatingSystem** 2017-05-24 USA Computer1 Domain1 1.2.3.4 Windows 2008 2017-05-24 England Computer2 Domain2 1.2.3.5 Windows Server® 2008 

我的代码到目前为止是:

 import os import xlrd import sys file = 'path/to/my/file.xlsx' workbook = xlrd.open_workbook(file) sheet = workbook.sheet_by_name('Data') for rowx in range(sheet.nrows): coldata = sheet.row_values(rowx) coldata = " ".join(str(x) for x in coldata).encode('ascii') with open ('/path/log.txt','a') as results: results.write(coldata) results.close() 

我不得不将数据转换为string,否则它将包括每个字段旁边的u' ,我不想在我的CSV中。 试图做到这一点,我遇到各种错误。 我得到的错误是:

 UnicodeEncodeError: 'ascii' codec can't encode character u'\xae' in position 14: ordinal not in range(128) 

如果我试图忽略这些人物,我会select这个:

 colsdata = colsdata.decode('ascii','ignore') Attribute error: 'list' object has no attribute 'decode' 

这些错误发生之前,我可以写入日志。

请给我一些帮助。 谢谢!

这应该做的伎俩。 它将忽略它不能转换的Unicode字符。

 import os import xlrd import sys import unicodedata workbook_path = "path/to/my/file.xlsx" workbook = xlrd.open_workbook(workbook_path) sheet = workbook.sheet_by_name("Sheet1") csv_data = "" def normalize(value): result = unicodedata.normalize("NFKD", unicode(value)).encode("ascii","ignore") return result for rowx in range(sheet.nrows): coldata = sheet.row_values(rowx) # Append data to string that we are going to output # and add new line csv_data += ", ".join(normalize(x) for x in coldata) + "\n" with open ("/path/log.txt","a") as results: results.write(csv_data) 

我testing了一个有一些假数据和文本Windows Server 20008®的excel文件,它为csv_data返回了以下内容:

 print csv_data foo, bar, baz 1.0, 2.0, 3.0 4.0, 5.0, 6.0 7.0, 8.0, Windows Server 2008