[英]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)
使用了两个索引参数linha和coluna_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.