在python中下载和使用xls文件时出现问题

在python中下载和使用xls文件时出现问题,python,excel,urllib,xls,xlrd,Python,Excel,Urllib,Xls,Xlrd,我正在尝试使用urllib和xlrd下载和操作xls文件 数据来自url 我使用的是Python 2.7、xlrd 0.9.4、urllib 1.17,我使用的是Mac 我能够使用此代码成功下载该文件 saveLocation = home_dir+"/test/" fileName = "data.xls" page = <the url given above> urllib.urlretrieve(page, saveLocation+fileName) 但是,我得到了错误

我正在尝试使用urllib和xlrd下载和操作xls文件

数据来自url

我使用的是Python 2.7、xlrd 0.9.4、urllib 1.17,我使用的是Mac

我能够使用此代码成功下载该文件

saveLocation = home_dir+"/test/"
fileName = "data.xls"
page = <the url given above>
urllib.urlretrieve(page, saveLocation+fileName)
但是,我得到了错误

XLRDError: Unsupported format, or corrupt file: Expected BOF record; found '\r\n\r\n<htm' 
然后,我能够以真正的Excel文件的形式访问该文件

ws = pd.read_excel(fileLocation+fileName, 0) 

正如Windows上的
,Excel提醒我:IME这对于由非Excel应用程序创建的文件来说很常见(例如,将缓冲区写入文本文件,然后用xls扩展名命名它,等等)。这个问题通常是通过在Excel应用程序中打开文件、保存/另存为并关闭文件来解决的。关于openpyxl,如果它是.xls格式,它就不是ZIP文件(xlsm、xlsx、xlsb等都是ZIP文件,旧的.xls扩展名不是)。我在Mac上没有看到任何这样的警告。是的,正如我在描述中提到的,如果我在Excel中打开文件并重新保存,问题就会消失。所以问题仍然存在,我需要做什么才能通过编程解决这个问题。不,我没有使用openpyxl尝试xls文件。正如您在上面看到的,我说过我尝试将其下载为xlsx文件,这是一种zip格式。所以openpyxl抱怨它不是一个有效的zip格式。哦,我相信你没有收到Mac上的警告,我的评论也不是故意居高临下,只是观察到这个文件的起源有点奇怪,这是错误的(再加上苹果已经阉割了很多Excel,特别是VBA功能),我需要做些什么才能通过编程解决这个问题呢?不知道xlrd或openpyxl是否有“修复”的方法文件——这两个模块都是轻量级模块,不打算完全模仿Excel的功能,而是主要用于从Excel文件中读取数据,而不需要Excel应用程序的开销。
dfs = pd.read_html(fileLocation+fileName, index_col = 7, header=0)[0]
writer = pd.ExcelWriter(fileLocation+fileName)
dfs.to_excel(writer,"Sheet1")
writer.save()
ws = pd.read_excel(fileLocation+fileName, 0) 
>>> url="http://profiles.doe.mass.edu/search/search_export.aspx?orgCode=&orgType=5,12&runOrgSearch=Y&searchType=ORG&leftNavId=11238&showEmail=N"
>>> dfs = pd.read_html(url)
>>> len(dfs)
1
>>> dfs[0].iloc[:5,:5]
                                                   0         1  \
0                                           Org Name  Org Code   
1       Abby Kelley Foster Charter Public (District)  04450000   
2                                           Abington  00010000   
3  Academy Of the Pacific Rim Charter Public (Dis...  04120000   
4                                     Acton (non-op)  00020000   

                        2                      3              4  
0                Org Type               Function   Contact Name  
1        Charter District  Charter School Leader     Brian Haas  
2  Public School District         Superintendent  Peter Schafer  
3        Charter District  Charter School Leader  Chris Collins  
4  Public School District         Superintendent    Glenn Brand  
>>> df = pd.read_html(url, header=0)[0]
>>> df.iloc[:5, :5]
                                            Org Name  Org Code  \
0       Abby Kelley Foster Charter Public (District)   4450000   
1                                           Abington     10000   
2  Academy Of the Pacific Rim Charter Public (Dis...   4120000   
3                                     Acton (non-op)     20000   
4                                   Acton-Boxborough   6000000   

                 Org Type               Function   Contact Name  
0        Charter District  Charter School Leader     Brian Haas  
1  Public School District         Superintendent  Peter Schafer  
2        Charter District  Charter School Leader  Chris Collins  
3  Public School District         Superintendent    Glenn Brand  
4  Public School District         Superintendent    Glenn Brand