为什么read_csv因无效的起始字节错误而失败?

时间:2019-12-28 00:33:46

标签: python windows pandas csv

目标:要将.xlsx文件转换为.csv文件,然后将其读入pandas数据框。 ( pd.read_excel()也可以)。

故障: 如果我将xlsx文件写入csv,则 pd.read_csv(... )将导致csv错误,但是如果我手动创建或更改文件,它将正常工作。

import pandas as pd; import csv; import xlrd

# open excel file
wb = xlrd.open_workbook(my_xlsx)
sh = wb.sheet_by_name('Sheet1')

# write each row from excel to csv
with open(my_csv, 'w', newline='') as csvFile:
    wr = csv.writer(csvFile, quoting=csv.QUOTE_MINIMAL)
    for rownum in range(sh.nrows):
        wr.writerow(sh.row_values(rownum))

# read into dataframe
df = pd.read_csv(my_csv)       # <-- this step throws the byte error

这会引发错误:

UnicodeDecodeError: 'utf-8' codec can't decode byte 0x85 in position 17: invalid start byte

修复: 如果在写入后通过全部复制/粘贴/保存来更改my_csv文件,或者仅编辑内容并保存,就不会再出现字节错误。 没有手动干预,我还没有找到解决问题的方法。

问题: 这是怎么回事此错误与Windows文本处理有关吗?是否可以通过在写入步骤中强制使用UTF-8编码来解决此问题?

我还没有机会在Linux上对其进行测试,但是如果这确实是Windows纯文本错误,希望它能够正常工作。对于我来说,这不仅仅是挂断电话的学习要点,但将不胜感激!

一些相关问题:Invalid Start ByteCSV Windows problems

1 个答案:

答案 0 :(得分:0)

也许您需要使用encoding='utf-8'选项打开csv。

这是代码。

import pandas as pd; import csv; import xlrd

# open excel file
wb = xlrd.open_workbook(my_xlsx)
sh = wb.sheet_by_name('Sheet1')

# write each row from excel to csv
with open(my_csv, 'w', encoding='utf-8', newline='') as csvFile:
    wr = csv.writer(csvFile, quoting=csv.QUOTE_MINIMAL)
    for rownum in range(sh.nrows):
        wr.writerow(sh.row_values(rownum))

# read into dataframe
df = pd.read_csv(my_csv)