報錯信息:
File "E:\Python\lib\site-packages\xlrd\compdoc.py", line 426, in _locate_stream
raise CompDocError("%s corruption: seen[%d] == %d" % (qname, s, self.seen[s]))
xlrd.compdoc.CompDocError: Workbook corruption: seen[2] == 4
由於在電腦上直接打開excel,excel是正常的。
繼續看報錯信息,來自於源文件compdoc.py,打開該文件,找到426行代碼,代碼如下:
if self.seen[s]:
print("_locate_stream(%s): seen" % qname, file=self.logfile); dump_list(self.seen, 20, self.logfile)
raise CompDocError("%s corruption: seen[%d] == %d" % (qname, s, self.seen[s]))
這是主動拋異常,將代碼全部註釋起來,再執行代碼,發現讀取正常。
總結一句話,第三庫的源碼有bug。。。
解決方案:
直接將上面三行代碼註釋掉
但是出於慎重起見,不太喜歡在底層庫上進行修改,從而避免以後使用時出現問題
所以:—》
一)找到自己的第三方庫存儲路徑:......\Anaconda3\Lib\site-packages
二)找到xlrd文件夾 複製一份隨便命名 (eg:xlrdxcx)
三)註釋副本 xlrdxcx 裏 對應的 compdoc.py
中的三行代碼
四)定義新的讀取函數
#自定義xls文件讀取函數
def read_xls_xcx(data_path,header=0):
data=xlrdxcx.open_workbook(data_path)
table = data.sheets()[0]
nrows = table.nrows
ncols = table.ncols
result=[]
for i in range(header,nrows):
result1=[]
for j in range(ncols):
result1.append(table.cell(i, j).value)
result.append(result1)
pd_result=pd.DataFrame(result)
pd_result.columns=pd_result.iloc[0,].tolist()
pd_result=pd_result[1:].reset_index(drop=True)
return pd_result
使用自定義函數:
read_xls_xcx(data_path,header=1)
相關解決方案:
之前寫得解決另外一個問題的,直接調用Excel程序讀取,應該也可以解決,因爲本問題出現在需要直接自動化下載後直接打開入庫,所以操縱Excel程序會影響主程序的執行,有興趣的也可以瞅瞅,鏈接如下:
【1】https://blog.csdn.net/qq_35866846/article/details/102672342
【2】https://blog.csdn.net/qq_35866846/article/details/102775288
參考資料:
Python讀取excel,常用第三方庫是xlrd,寫入的是xlwt。
在讀取excel的時候,代碼如下:
```python
data = xlrd.open_workbook('data.xls')
table = data.sheets()[0]
nrows = table.nrows
ncols = table.ncols
```
參考鏈接:
【1】https://blog.csdn.net/HuangZhang_123/article/details/78717002
【2】https://www.cnblogs.com/zhang-jun-jie/p/9273721.html