47

私のコード:

import xlrd
wb = xlrd.open_workbook("Z:\\Data\\Locates\\3.8 locates.xls")
sh = wb.sheet_by_index(0)
print sh.cell(0,0).value

エラー:

Traceback (most recent call last):
File "Z:\Wilson\tradedStockStatus.py", line 18, in <module>
wb = xlrd.open_workbook("Z:\\Data\\Locates\\3.8 locates.xls")
File "C:\Python27\lib\site-packages\xlrd\__init__.py", line 429, in open_workbook
biff_version = bk.getbof(XL_WORKBOOK_GLOBALS)
File "C:\Python27\lib\site-packages\xlrd\__init__.py", line 1545, in getbof
bof_error('Expected BOF record; found %r' % self.mem[savpos:savpos+8])
File "C:\Python27\lib\site-packages\xlrd\__init__.py", line 1539, in bof_error
raise XLRDError('Unsupported format, or corrupt file: ' + msg)
xlrd.biffh.XLRDError: Unsupported format, or corrupt file: Expected BOF record;
found '<table r'"

ファイルが破損していないか、形式が異なっているようには見えません。問題の原因を見つけるのに役立つものは何でも素晴らしいでしょう。

4

20 に答える 20

53

パンダでHTMLとして開いてみてください:

import pandas as pd
data = pd.read_html('filename.xls')

または、他のhtmlpythonパーサーを試してください。

これは適切なExcelファイルではありませんが、Excelで読み取り可能なHTMLです。

于 2014-07-13T17:02:11.130 に答える
39

あなたは言う:

ファイルが破損していないか、形式が異なっているようには見えません。

ただし、エラーメッセージに示されているように、ファイルの最初の8バイトは'<table r'...これは間違いなくExcel.xls形式ではありません。.xls(間違った)拡張子に気付かないテキストエディタ(メモ帳など)で開いて、自分の目で確かめてください。

于 2012-03-09T09:14:07.357 に答える
16

これは、Excelで開いているときに一部のファイルで発生します。

于 2013-06-26T20:16:35.847 に答える
8

私も同様の問題を抱えていましたが、それはバージョンに関連していました。Pythonターミナルチェックで:

>> import xlrd
>> xlrd.__VERSION__

'0.9.0'を使用している場合は、ほとんどすべてのファイルを開くことができます。Ubuntuで見つけた「0.6.0」を使用している場合は、最新のExcelファイルで問題が発生している可能性があります。Distutils標準を使用して、最新バージョンのxlrdをダウンロードできます。

于 2013-03-15T16:09:51.013 に答える
6

.xlsファイルをダウンロードし、xlrdライブラリを使用して開いたときに、同様の問題が見つかりました。次に、ここで詳しく説明するように、.xlsを.xlsxに変換するソリューションを試しました:xlsをxlsxに変換する方法

それは魅力のように機能し、.xlsを開くのではなく、openpyxlライブラリを使用して.xlsxファイルを操作しています。

それがあなたの問題を解決するのに役立つことを願っています。

于 2016-01-05T09:53:42.827 に答える
5

私は同じエラーに直面しxlrd.biffh.XLRDError: Unsupported format, or corrupt file: Expected BOF record;、XMLからXLSXへのコンバーターを作成することで問題を解決しました。その理由は、実際には、xlrdはXMLスプレッドシート(​​ .xml)をサポートしていない、つまりXLSまたはXLSX形式ではサポートしていないためです。


import pandas as pd
from bs4 import BeautifulSoup

def convert_to_xlsx():
    with open('sample.xls') as xml_file:
        soup = BeautifulSoup(xml_file.read(), 'xml')
        writer = pd.ExcelWriter('sample.xlsx')
        for sheet in soup.findAll('Worksheet'):
            sheet_as_list = []
            for row in sheet.findAll('Row'):
                sheet_as_list.append([cell.Data.text if cell.Data else '' for cell in row.findAll('Cell')])
            pd.DataFrame(sheet_as_list).to_excel(writer, sheet_name=sheet.attrs['ss:Name'], index=False, header=False)

        writer.save()

于 2020-07-21T14:31:32.963 に答える
3

私の場合、@ john-machinが提案したようにテキストエディタでファイルを開いた後、ファイルがExcelファイルのように暗号化されていないことに気付きましたが、CSV形式であり、Excelファイルとして保存されました。私がしたことは、ファイルとその拡張子の名前を変更し、read_csv代わりに関数を使用することでした:

os.rename('sample_file.xls', 'sample_file.csv')
csv = pd.read_csv("sample_file.csv", error_bad_lines=False)
于 2015-07-09T13:02:49.703 に答える
1

私もこの問題に遭遇しました。このファイルをExcelで開き、Excel 97-2003などの他の形式で保存して、最終的にこの問題を解決しました。

于 2016-08-04T08:38:59.383 に答える
1

私も同じ問題を抱えていました。これらの古いファイルは、タブ区切りファイルのようにフォーマットされています。read_table問題のあるファイルを;で開くことができました。すなわちdf = pd.read_table('trouble_maker.xls')

于 2018-03-01T04:05:39.190 に答える
1

古いExcelファイル形式である可能性があります。パンダではhtmlとして読み取ることができます

import pandas as pd
df = pd.read_html('file.xls')

最終的に、これによりデータフレームのリストが表示されます(タイプがリストであるかどうかを確認した場合)。https://pandas.pydata.org/pandas-docs/version/0.17.1/io.html#io-read-html

たとえば、それらを抽出する必要がありますdf[0]

于 2021-09-25T18:00:18.533 に答える
0

xlrdをダウンロードし、テスト用のExcelドキュメント(Excel 2007)を作成したところ、同じエラーが発生しました(「PK \ x03 \ x04 \ x14 \ x00 \ x06 \ x00が見つかりました」というメッセージが表示されます)。拡張機能はxlsxです。古い.xls形式で保存しようとすると、エラーが消えます....。

于 2012-03-18T16:02:14.707 に答える
0

私は同じ問題に直面します。

.xlsファイル自体にあります-Excelファイルのように見えますが、そうではありません。(Excelから.xlsを単純に開いたときにポップアップが表示されるかどうかを確認してください)

sjmachinは、2013年1月19日にhttps://github.com/python-excel/xlrd/issues/26からコメントしました。

于 2015-07-23T04:24:10.293 に答える
0

同じ問題に取り組み、最終的にこれが質問のトップになるので、私がしたことを置くだけです。

観察-1-ファイルは実際にはXLSではありませんでした。名前をtxtに変更し、ファイル内のHTMLテキストに気づきました。

2-ファイルの名前をhtmlに変更し、pd.read_htmlを読み取ろうとしましたが、失敗しました。

3- txtファイルになかったので追加し、テーブルがローカルからブラウザに表示されるようにスタイルを削除し、機能しました。

以下は誰かを助けるかもしれないコードです。

import pandas as pd
import os
import shutil
import html5lib
import requests
from bs4 import BeautifulSoup
import re
import time

shutil.copy('your.xls','file.html')
shutil.copy('file.html','file.txt')
time.sleep(2)

txt = open('file.txt','r').read()

# Modify the text to ensure the data display in html page, delete style

txt = str(txt).replace('<style> .text { mso-number-format:\@; } </script>','')

# Add head and body if it is not there in HTML text

txt_with_head = '<html><head></head><body>'+txt+'</body></html>'

# Save the file as HTML

html_file = open('output.html','w')
html_file.write(txt_with_head)

# Use beautiful soup to read

url = r"C:\Users\hitesh kumar\PycharmProjects\OEM ML\output.html"
page = open(url)
soup = BeautifulSoup(page.read(), features="lxml")
my_table = soup.find("table",attrs={'border': '1'})

frame = pd.read_html(str(my_table))[0]
print(frame.head())
frame.to_excel('testoutput.xlsx',sheet_name='sheet1', index=False)
于 2020-01-25T09:17:52.867 に答える
0

?raw=trueファイルパスの最後に追加すると役立つ場合があります。例えば:

wb = xlrd.open_workbook("Z:\\Data\\Locates\\3.8 locates.xls?raw=true")
于 2020-07-28T22:07:46.143 に答える
0

Googleスプレッドシートで開き、スプレッドシートからCSVとしてダウンロードしてから、ドライブに再アップロードします。次に、PythonからCSVファイルを開くことができます。

于 2020-10-29T16:31:17.207 に答える
0

フォルダーからいくつかのXLSXファイルを読み込もうとしたときに、このエラーが発生し、ファイルの1つが開かれました。XLSXファイルを閉じましたが、このエラーは表示されませんでした。

于 2021-08-24T05:59:56.087 に答える
0

私が知っている2つの方法は、xlsファイルをもう一度ダウンロードすることです。グーグルコラボで実行している場合は、コンピューターからファイルをもう一度ロードして、pd.read_excel( "filename、xlsx")をもう一度実行します。動作するはずです。

于 2021-11-06T03:41:10.307 に答える
0

これを試してみてくださいそれは私のために働いた。

import pandas as pd
data = pd.read_csv('filename.xls')
于 2022-01-23T09:11:44.207 に答える
-1

ファイルに問題はありません。xlrdはまだxlsx(excel 2007+)ファイルをサポートしていませんが、しばらくの間これをサポートしていたとされています。

Simplistix github

2日前、彼らはxlsxサポートを統合するプレアルファバージョンをgitにコミットしました。他のフォーラムでは、xlsxファイルタイプはXMLを含む単なるzipアーカイブであるため、xlsxファイルにはDOMパーサーを使用することをお勧めします。私はこれを試していません。xlrdと同様の機能を持つ別のパッケージがあり、これはopenpyxlと呼ばれ、easy_installまたはpipから取得できます。私もこれを試していませんが、そのAPIはxlrdに似ているはずです。

于 2012-04-15T05:18:55.840 に答える
-1

私はそれを解決するための適切な方法があるべきだと知っていますが、ただ時間を節約するためです

xlsxシートをGoogleスプレッドシートにアップロードしてから、Googleスプレッドシートから再度ダウンロードしました。

問題を解決する時間がない場合は、これを試すことができます

于 2020-01-15T12:45:28.670 に答える