将包含特殊字符的Excel工作表输出到CSV

时间:2017-05-26 13:58:27

标签: python excel python-2.7 export-to-csv xlrd

我有一个包含多个工作表的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()

我必须将数据转换为字符串,否则它将在每个字段旁边包含 u',这在我的CSV中我不想要。试图这样做我遇到了各种错误。 我得到的错误是:

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

如果我试图忽略这些角色,我就会这样:

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

这些错误发生在我能够写入日志之前。

我可以得到一些帮助。谢谢!

1 个答案:

答案 0 :(得分:1)

这应该可以解决问题。它将忽略它无法转换的unicode字符。

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

我使用excel文件对其进行了测试,该文件包含一些虚假数据和文本Windows Server20008®,并为csv_data返回以下内容:

import pandas as pd

df = pd.DataFrame({ 'lat' : range(0,8),
                    'name' : ['a', 'a', 'a', 'a', 'b', 'b', 'b', 'b']})
df