programing

python xlrd 형식이 지원되지 않거나 파일이 손상되었습니다.

sourcejob 2023. 4. 9. 21:26
반응형

python xlrd 형식이 지원되지 않거나 파일이 손상되었습니다.

내 코드:

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'"

파일이 손상되었거나 다른 형식의 파일은 아닌 것 같습니다.문제의 원인을 찾는 데 도움이 되는 것이면 무엇이든지 좋습니다.

팬더와 함께 HTML로 열어보세요.

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

또는 다른 html python 파서를 사용해 보십시오.

그것은 적절한 엑셀 파일이 아니라 엑셀로 읽을 수 있는 HTML입니다.

다음과 같이 말합니다.

파일이 손상되었거나 다른 형식의 파일은 아닌 것 같습니다.

, 있듯이, 첫 8 는 「」입니다.'<table r' Excel이 【Excel】【엑셀】.xls포맷합니다.텍스트 에디터(예: 메모장)에서 (잘못됨)에 주의하지 않는 텍스트에디터(예: 메모장)로 엽니다..xls접접확확확확확확

이 문제는 Excel에서 열려 있는 일부 파일에서도 발생합니다.

저도 비슷한 문제가 있었는데 버전과 관련된 문제였어요.python 터미널 체크:

>> import xlrd
>> xlrd.__VERSION__

0.9.0'이 있으면 거의 모든 파일을 열 수 있습니다.Ubuntu에서 발견한 '0.6.0'이 있으면 최신 Excel 파일에 문제가 있을 수 있습니다.Distutils 표준을 사용하여 xlrd의 최신 버전을 다운로드할 수 있습니다.

.xls 파일을 다운로드 할 때도 같은 문제가 발견되어 xlrd 라이브러리를 사용하여 파일을 열었습니다.그 후, 여기서 설명한 와 같이 .xls를 .xlsx로 변환하는 솔루션을 시험해 보았습니다.xls를 xlsx로 변환하는 방법

마법처럼 작동하며 .xls를 여는 대신 현재 openpyxl 라이브러리를 사용하여 .xlsx 파일로 작업하고 있습니다.

그것이 당신의 문제를 해결하는 데 도움이 되기를 바랍니다.

도 같은 얼굴을 .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()

저의 경우 @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)

오래된 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]

나도 이 문제를 만났다.이 파일을 엑셀로 열고 엑셀 97-2003 등 다른 형식으로 저장하여 이 문제를 해결하였습니다.

★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★이러한 오래된 파일은 탭으로 구분된 파일처럼 형식이 지정됩니다.열 수 있게 되었습니다.read_table즉, (표준,df = pd.read_table('trouble_maker.xls').

폴더에서 XLSX 파일을 읽으려고 했을 때 파일 중 하나가 열려 있을 때 이 오류가 발생했습니다.XLSX 파일을 닫았는데 이 에러는 표시되지 않았습니다.

이거 먹어봐 나한텐 효과가 있었어

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

xlrd를 다운로드하여 테스트용 Excel 문서(excel 2007)를 작성하면 동일한 오류가 나타납니다(메시지에는 'Found PK\x03\x04\x14\x00\x06\x00'이라고 표시됩니다).내선번호는 xlsx입니다.이전 .xls 형식으로 저장하려고 하면 오류가 사라집니다....

저도 같은 문제에 부딪힙니다.

.xls 파일 자체에 있습니다.Excel 파일처럼 보이지만 그렇지 않습니다.(Excel에서 .xls를 열면 팝업이 뜨는지 확인하세요.)

sjmachin은 2013년 1월 19일 https://github.com/python-excel/xlrd/issues/26 helps에서 코멘트했다.

같은 문제에 대해 일하고, 마침내 이 일을 끝냈기 때문에, 내가 한 일을 덧붙입니다.

관찰 - 1 - 파일이 실제로는 XLS i가 아닌 txt로 이름이 변경되어 HTML 텍스트가 파일에 있음을 알 수 있습니다.

2 - 파일 이름을 html로 변경하고 pd.read_html을 읽어보았습니다.실패했습니다.

3-txt 파일에 없는 대로 추가, 로컬에서 브라우저에 테이블이 표시되도록 스타일을 삭제하고 WORKED.

아래는 도움이 될 수 있는 코드입니다.

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)

Google 시트에서 열고 시트에서 CSV로 다운로드한 후 드라이브에 다시 업로드합니다.그런 다음 python에서 CSV 파일을 열 수 있습니다.

제가 알고 있는 2가지 방법은 xls 파일을 다시 다운로드하는 것입니다.구글 collab에서 파일을 다시 로드하고 pd.read_excel("filename,xlsx")을 다시 실행하는 것입니다.그건 작동할 거야.

그들이 이미 썼기 때문에 당신이 사용할 수 있는 첫 번째 표를 보기 위해 실제로 html입니다.

df= pd.read_html(file)
df[0]

사용할 수 있는 테이블 수 확인

print('Tables found:', len(df))

방법은 .encoding="utf-8"게시물부터 UnicodeDecodeError: 'charmap' 코덱이 위치 100에서 바이트 0x90을 디코딩할 없음: 문자가 <undefined>로 매핑됨

    def convert_to_xlsx():
        with open('sample.xls', encoding="utf-8") 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()

melike의 답변은 유효하지만, 마지막 출력 문장은 기능하지 않기 때문에, 같은 문제가 있어 xlsx 파일을 로컬로 출력하고 싶은 사람이 있으면, 마지막 3 행을 간단하게 변경할 수 있습니다.

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')]) 
        output_df = pd.DateFrame(sheet_as_list)
        output_df.to_excel(writer, sheet_name='sheet1',index=False, header=False)
        writer.close()
import os
import pandas as pd

# Rename the file if it's not already a .csv file
if not os.path.exists('3.8 locates.csv'):
    os.rename('3.8 locates.xls', '3.8 locates.csv')

# Load the data into a pandas dataframe
df = pd.read_csv("3.8 locates.csv", sep='\t|\n', engine='python')

# Show the first 5 rows of the dataframe
print(df.head())

코드는 os 및 pander 모듈을 Import한 후 이들을 사용하여 다음 작업을 수행합니다.

  1. '3.8 locations.csv' 파일이 있는지 확인합니다.
  2. 존재하지 않는 경우는, 파일의 이름을 「3.8」로 변경합니다.xls'에서 '3.8 locations.csv'로 이동합니다.
  3. pd.read_csv 메서드를 사용하여 '3.8 locations.csv' 파일의 내용을 Panda 데이터 프레임에 로드합니다.파일의 구분자를 올바르게 처리하기 위해 sep 인수는 '\t|\n'로, engine 인수는 'python'으로 설정됩니다.
  4. df.head() 메서드를 사용하여 데이터 프레임의 첫 번째 5 행을 인쇄합니다.주의: 파일이 탭으로 구분되거나 줄바꿈으로 구분된 유효한 파일이 아닌 경우 코드가 예상대로 작동하지 않을 수 있습니다.

파일에는 아무 문제가 없어요xlrd는 xlsx (2007+)파일을 지원하지 않지만 한동안 이 기능을 지원했다고 알려져 있습니다.

심플리스틱스 기트허브

이틀 전 그들은 xlsx 지원을 통합한 프리알파 버전을 git에 커밋했다.다른 포럼에서는 xlsx 파일 형식은 XML을 포함하는 zip 아카이브일 뿐이므로 xlsx 파일에 DOM 파서를 사용할 것을 제안합니다.저는 아직 시도하지 않았습니다.xlrd와 유사한 기능을 가진 다른 패키지가 있습니다.이 패키지는 openpyxl이라고 불리며 easy_install 또는 pip에서 얻을 수 있습니다.이것도 해보지 않았는데 API가 xlrd와 비슷하다고 합니다.

적절한 해결 방법이 있어야 한다는 것을 알지만 시간을 절약하기 위해서이다.

xlsx 시트를 Google Sheets에 업로드하고 다시 Google Sheets에서 다운로드했습니다.

문제를 해결할 시간이 없다면, 이것을 시도해 보세요.

추가에 도움이 될 수 있습니다.?raw=true파일 경로 끝에 있습니다.예를 들어 다음과 같습니다.

wb = xlrd.open_workbook("Z:\\Data\\Locates\\3.8 locates.xls?raw=true")

언급URL : https://stackoverflow.com/questions/9623029/python-xlrd-unsupported-format-or-corrupt-file

반응형