使用python读取XLS文件时出错(little-endian)

时间:2018-03-09 16:10:44

标签: python excel pandas dataframe encoding

我使用selenium从网上下载了一个XLS文件。

我在堆栈溢出和其他网站上尝试了很多选项来读取XLS文件:

import pandas as pd
df = pd.read_excel('test.xls') # Read XLS file
Expected "little-endian" marker, found b'\xff\xfe'

df = pd.ExcelFile('test.xls').parse('Sheet1') # Read XLSX file
Expected "little-endian" marker, found b'\xff\xfe'

再次

from xlrd import open_workbook
book = open_workbook('test.xls') 
CompDocError: Expected "little-endian" marker, found b'\xff\xfe'

我尝试过不同的编码:utf-8,ANSII,utf_16_be,utf16 我甚至试图从记事本或其他应用程序获取文件的编码。

文件类型:Microsoft Excel 97-2003工作表(.xls) 我可以用Excel打开文件,没有任何问题。 令人沮丧的是,如果我使用excel打开文件并按下save,那么可以使用之前的python命令读取该文件。

如果有人能提供我可以尝试的其他想法,我将非常感激。我只需要用python脚本打开这个文件。

谢谢, 最大

解决方案(有点混乱但很简单)可能适用于任何类型的Excel文件:

从python调用VBA到Open并将文件保存在Excel中。 Excel"清理"该文件,然后Python能够使用任何读取Excel类型函数

读取它

解决方案受到@Serge Ballesta和@John Y评论的启发。

## Open a file in Excel and save it to correct the encoding error 
import win32com.client
import pandas

downloadpath="c:\\firefox_downloads\\"
filename="myfile.xls"

xl=win32com.client.Dispatch("Excel.Application")
xl.Application.DisplayAlerts = False # disables Excel pop up message (for saving the file)
wb = xl.Workbooks.Open(Filename=downloadpath+filename)
wb.SaveAs(downloadpath+filename)
wb.Close
xl.Application.DisplayAlerts = True  # enables Excel pop up message for saving the file

df = pandas.ExcelFile(downloadpath+filename).parse('Sheet1') # Read XLSX file

谢谢大家!

1 个答案:

答案 0 :(得分:0)

pd 是什么意思?什么

pandas 是为数据科学而制作的。在我看来,你必须使用 openpyxl (只读和写xlsx)或 xlwt / xlrd (读xls ...并只写xls)。

from xlrd import open_workbook
book = open_workbook(<math file>)
sheet =.... 

在互联网上有几个例子......