繁体   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