1
resposta

Erro BadZipFile ao salvar Dataframe pro excel.

Olá estou desenvolvendo um programa que ao decorrer vai salvando multiplos arquivos excel, mas no ultimo arquivo sempre acontece este erro

BadZipFile: File is not a zip file

Nos outros não acontece nada é sempre no ultimo, porque eu tentei apagar esse excel mas o erro continuo no penultimo, como o codígo é extenso vou colocar apenas os dois ultimos.

from selenium import webdriver
import pandas as pd
from bs4 import BeautifulSoup, NavigableString
from time import sleep
from pathlib import Path
from selenium.common.exceptions import NoSuchElementException
from openpyxl import load_workbook

ordem = int(input('Digite a tecla 1 para crescente, 2 para descrescente:'))
dadosart = int(input('Digite a ART:'))
filename = str(input('Digite o caminho a ser salvo:'))

    # 5. Observações
    tabela4 = []
    try:
        dados = driver.find_element_by_xpath('/html/body/table/tbody/tr/td/fieldset/table/tbody/tr/td/font').text
        tabela4.append(artl), tabela4.append(dados)
        observacoes = pd.DataFrame(tabela4).T
        pasta = (filename+'/Observações.xlsx')
        caminho = Path('r',pasta)
        if not caminho.exists():
            writer = pd.ExcelWriter(pasta)
            observacoes.to_excel(writer, index=False)
            writer.save()
        else:
            writer = pd.ExcelWriter(pasta, engine='openpyxl')
            writer.book = load_workbook(pasta)
            writer.sheets = dict((ws.title, ws) for ws in writer.book.worksheets)
            reader = pd.read_excel(pasta)
            observacoes.to_excel(writer, index=False, header=False, startrow=len(reader) + 1)
            writer.close()
    except NoSuchElementException:
        pass

    #Last Row
    tabela5 = []
    dados = driver.find_elements_by_xpath('//div[@class="tela_impressao"]')[-1]
    tab = dados.find_elements_by_tag_name('b')
    tabela5.append(artl)
    for grade in tab: tabela5.append(grade.text)
    info1 = pd.DataFrame(tabela5).T
    info1.columns= ['ART', 'Situação', 'Baixa']
    pasta = (filename+'/info.xlsx')
    caminho = Path(pasta)
    if not caminho.exists():
        writer = pd.ExcelWriter(pasta, engine='openpyxl')
        info1.to_excel(writer, index=False)
        writer.save()
    else:
        writer = pd.ExcelWriter(pasta, engine='openpyxl')
        writer.book = load_workbook(pasta)
        writer.sheets = dict((ws.title, ws) for ws in writer.book.worksheets)
        reader = pd.read_excel(pasta)
        info1.to_excel(writer, index=False, header=False, startrow=len(reader) + 1)
        writer.close()

Print: https://ibb.co/52JDJ4q

Quando o ultimo é salvo, ele apenas salva a primeira coluna, mas quando verifico o dataframe, ele está completo. Excel: https://ibb.co/bF8CVGB

Alguém pode me salvar?

1 resposta

Olá Henrique. Tudo bem ? Espero que sim.

Desculpa pela demora do retorno. Fiz uma versão simplificada do seu código focando na parte de salvar e criar o Excel, que é onde eu acreditei que estava o problema.

import pandas as pd
from pathlib import Path
from selenium.common.exceptions import NoSuchElementException
from openpyxl import load_workbook


try:
    observacoes = pd.DataFrame([10,20,30])
    pasta = ('C:/Users/igor_/Desktop/duvida/Observações.xlsx')
    caminho = Path('r',pasta)
    if not caminho.exists():
        writer = pd.ExcelWriter(pasta) # pylint: disable=abstract-class-instantiated
        observacoes.to_excel(writer, index=False)
        writer.save()
    else:
        writer = pd.ExcelWriter(pasta, engine='openpyxl') # pylint: disable=abstract-class-instantiated
        writer.book = load_workbook(pasta)
        writer.sheets = dict((ws.title, ws) for ws in writer.book.worksheets)
        reader = pd.read_excel(pasta)
        observacoes.to_excel(writer, index=False, header=False, startrow=len(reader) + 1)
        writer.close()
except NoSuchElementException:
    pass

info1 = pd.DataFrame([10,20,30])
info1.columns= ['ART']
pasta = ('C:/Users/igor_/Desktop/duvida/info.xlsx')
caminho = Path(pasta)
if not caminho.exists():
    writer = pd.ExcelWriter(pasta, engine='openpyxl')# pylint: disable=abstract-class-instantiated
    info1.to_excel(writer, index=False)
    writer.save()
else:
    writer = pd.ExcelWriter(pasta, engine='openpyxl')# pylint: disable=abstract-class-instantiated
    writer.book = load_workbook(pasta)
    writer.sheets = dict((ws.title, ws) for ws in writer.book.worksheets)
    reader = pd.read_excel(pasta)
    info1.to_excel(writer, index=False, header=False, startrow=len(reader) + 1)
    writer.close()

Infelizmente não consegui gerar o mesmo cenário que você e tão pouco visualizar onde poderia estar acontecendo problema.

Então gostaria de te pedir duas coisas, primeiro gostaria de saber em qual linha do seu código está gerando o erro, não consigo visualizar no seus prints e segundo se puder fornecer seu código completo atreves do Google Drive ou Github seria fantástico.

Fico no aguardo, bons estudos.