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

b4wnujal  于 2023-06-28  发布在  Python
关注(0)|答案(2)|浏览(127)

我用selenium从网上下载了一个XLS文件。
我尝试了在stack-overflow和其他网站上找到的许多选项来读取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打开文件,然后按下保存,我就可以用前面的python命令读取文件。
如果有人能给我提供其他我可以尝试的想法,我将非常感激。我只需要用Python脚本打开这个文件。
谢谢你,麦克斯

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

从python调用VBA以在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

谢谢大家!

ozxc1zmp

ozxc1zmp1#

我使用以下方法摆脱了这个问题:

# Read content in bytes from whatever is your source, then:
content = content[:28]+b'\xFE\xFF'+content[30:]
with open('file.xls', 'wb') as file:
    file.write(content)

# This works now
df = pd.read_excel('file4.xls')

基于此:https://github.com/python-excel/xlrd/blob/master/xlrd/compdoc.py#L90

oalqel3c

oalqel3c2#

pd是什么意思?什么
pandas是为数据科学而设计的。在我看来,你必须使用
openpyxl**(只读写xlsx)或xlwt/xlrd(读xls...并且仅写入x1)。

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

在互联网上有很多这样的例子……

相关问题