簡體   English   中英

Python 索引超出范圍 lib 循環問題中的錯誤

[英]Python Index out of range Error in lib loop issue

一切安好? 但願如此。

我正在處理這個問題:列表索引超出范圍。 -

錯誤消息:c:\Users.....\Documents\t.py:41: FutureWarning: 由於不再維護 xlwt package,xlwt 引擎將在 Z3A4F05AZ4F8EFA9C2D 的未來版本中刪除。 這是 pandas 中唯一支持 xls 格式寫入的引擎。 安裝 openpyxl 並改為寫入 xlsx 文件。 您可以將選項 io.excel.xls.writer 設置為“xlwt”以消除此警告。 雖然此選項已棄用並且還會引發警告,但可以全局設置並抑制警告。
read_file.to_excel(planilhaxls,索引=無,標題=真)

錯誤

目標:我需要創建一個循環來存儲工作表的特定行,例如 sheet_1.csv,此對應行在 sheet_2.csv 和第三張表中,存儲在 sheet_output.Z628Z19675FFE288FE3FZ 中的 3 列中

問題:出現超出范圍的索引錯誤,我不知道該怎么辦

疑問:我還有其他方法可以做到嗎?

  • 代碼如下:(請忽略葡萄牙語評論)
import xlrd as ex
import pyautogui as pag
import os
import pyperclip as pc
import pandas as pd
import pygetwindow as pgw
import openpyxl

#Inputs
numerolam = int(input('Escolha o número da lamina: '))
amostra = input('Escoha a amostra: (X, Y, W ou Z): ')
milimetro_inicial = int(input("Escolha o milimetro inicial: "))
milimetro_final = int(input("Escolha o milimetro final: "))
tipo = input("Escolha o tipo - B para Branco & E para Espelho: ")
linha = int(input("Escolha a linha da planilha: "))

# Conversão de código
if tipo == 'B':
    tipo2 = 'BRA'
else: 
    tipo2 = 'ESP'

#Arquivo xlsx
#planilhaxlsx = f'A{numerolam}{amostra}{milimetro_inicial}{tipo2}.xlsx'
#planilhaxls = f'A{numerolam}{amostra}{milimetro_inicial}{tipo2}.xls'
#planilhacsv = f'A{numerolam}{amostra}{milimetro_inicial}{tipo2}.csv'
#planilhacsv_ = f'A{numerolam}{amostra}{milimetro_final}{tipo2}.csv'
#arquivoorigin = f'A{numerolam}{amostra}{milimetro_inicial}{tipo2}.opj'

#Pasta
pasta =  f'L{numerolam}{amostra}'

while milimetro_inicial < milimetro_final:
    planilhaxlsx = f'A{numerolam}{amostra}{milimetro_inicial}{tipo2}.xlsx'
    planilhaxls = f'A{numerolam}{amostra}{milimetro_inicial}{tipo2}.xls'
    planilhacsv = f'A{numerolam}{amostra}{milimetro_inicial}{tipo2}.csv'
    planilhacsv_ = f'A{numerolam}{amostra}{milimetro_final}{tipo2}.csv'
    arquivoorigin = f'A{numerolam}{amostra}{milimetro_inicial}{tipo2}.opj'
    
    # Converte o arquivo .csv para .xls e .xlsx
    read_file = pd.read_csv(planilhacsv)
    read_file.to_excel(planilhaxls, index = None, header=True)
    #read_file.to_excel(planilhaxlsx, index = None, header=True)
    
    # Abre o arquivo .xls com o xlrd - arquivo excel.
    book = ex.open_workbook(planilhaxls)
    sh = book.sheet_by_index(0)

    # Declaração de variáveis.
    coluna_inicial = 16 # Q - inicia em 0
    valor = []
    index = 0


    # Loop que armazena o valor da linha pela coluna Q-Z na variável valor 0-(len-1)
    while coluna_inicial < 25:
        **#ERRO NA LINHA ABAIXO**
        **temp = sh.cell_value(linha, coluna_inicial)**
        valor.append(temp) # Adiciona o valor
        print(index)
        print(valor[index])
        index +=1 
        coluna_inicial += 1

    # Abre planilha de saída
    wb = openpyxl.Workbook()
    ws = wb.active

    #Inicia loop de escrita
    colunas = ['A','B','C','D','E','F','G','H','I','J','K','L','M','N','O','P','Q','R','S','T','U','V','W','X','Y','Z']
    idx_colunas = 0
    contador_loop = colunas[idx_colunas]
    linha_loop = 1
    index_out = 0
    s = f'{contador_loop}{linha_loop}'

    print(s)

    while linha_loop < len(valor):
        valor[index_out] = "{}".format(valor[index_out])
        ws[s].value = valor[index_out]
        print(valor[index_out] + ' feito')
        linha_loop += 1
        idx_colunas += 1
        index_out += 1

    # Salva planilha de saída
    wb.save("teste.xlsx")
    milimetro_inicial += 1 

你的問題在這條線上

temp = sh.cell_value(linha, coluna_inicial) 

使用了兩個索引參數linhacoluna_initial ,“linha”似乎是 static 值,因此問題似乎與“coluna_inicial”有關,每次迭代都會增加 1

coluna_inicial += 1

當“coluna_initial”值小於 25 時,循環繼續。我建議您使用“sh”檢查工作表中的列數

sh.ncols

用於調試或作為循環的首選上限值。 如果小於 25,一旦 'coluna_initial' 值超過 'sh.ncols' 值,就會出現索引錯誤。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM