Eu sou novo no Python. Preciso gravar alguns dados do meu programa em uma planilha. Pesquisei on-line e parece haver muitos pacotes disponíveis (xlwt, XlsXcessive, openpyxl). Outros sugerem gravar em um arquivo .csv (nunca usou CSV e realmente não entende o que é).
O programa é muito simples. Eu tenho duas listas (float) e três variáveis (strings). Não sei os comprimentos das duas listas e provavelmente não terão o mesmo comprimento.
Quero que o layout seja como na figura abaixo:
A coluna rosa terá os valores da primeira lista e a coluna verde terá os valores da segunda lista.
Então, qual é a melhor maneira de fazer isso?
PS Estou executando o Windows 7, mas não necessariamente tenho o Office instalado nos computadores executando este programa.
import xlwt
x=1
y=2
z=3
list1=[2.34,4.346,4.234]
book = xlwt.Workbook(encoding="utf-8")
sheet1 = book.add_sheet("Sheet 1")
sheet1.write(0, 0, "Display")
sheet1.write(1, 0, "Dominance")
sheet1.write(2, 0, "Test")
sheet1.write(0, 1, x)
sheet1.write(1, 1, y)
sheet1.write(2, 1, z)
sheet1.write(4, 0, "Stimulus Time")
sheet1.write(4, 1, "Reaction Time")
i=4
for n in list1:
i = i+1
sheet1.write(i, 0, n)
book.save("trial.xls")
Eu escrevi isso usando todas as suas sugestões. Ele faz o trabalho, mas pode ser ligeiramente aprimorado.
Como formatar as células criadas no loop for (valores da lista1) como científicas ou numéricas?
Não quero truncar os valores. Os valores reais usados no programa teriam cerca de 10 dígitos após o decimal.
Respostas:
para mais explicações: https://github.com/python-excel
fonte
xlwt
é apenas para gravar os.xls
arquivos antigos do Excel 2003 ou anterior. Isso pode estar desatualizado (dependendo de suas necessidades).Use DataFrame.to_excel dos pandas . O Pandas permite que você represente seus dados em estruturas de dados funcionalmente ricas e também permite ler em arquivos do Excel.
Você primeiro terá que converter seus dados em um DataFrame e, em seguida, salvá-los em um arquivo do Excel, assim:
e o arquivo do Excel que aparece é assim:
Observe que ambas as listas precisam ter o mesmo comprimento, caso contrário os pandas irão reclamar. Para resolver isso, substitua todos os valores ausentes por
None
.fonte
xlwt
também era usado , mas obtendo umopenpyxl
erro. Para qualquer pessoa que fique confusa com isso - está tudo no tipo de arquivo que você deseja. Os documentos do pandas (0.12) dizem "Arquivos com uma.xls
extensão serão gravados usando xlwt e aqueles com uma.xlsx
extensão serão gravados usando openpyxl".xlrd / xlwt (padrão): O Python não possui essa funcionalidade em sua biblioteca padrão, mas penso no xlrd / xlwt como a maneira "padrão" de ler e gravar arquivos do Excel. É bastante fácil criar uma pasta de trabalho, adicionar folhas, escrever dados / fórmulas e formatar células. Se você precisar de todas essas coisas, poderá ter mais sucesso com esta biblioteca. Eu acho que você poderia escolher o openpyxl e seria bem parecido, mas eu não o usei.
Para formatar células com xlwt, defina a
XFStyle
e inclua o estilo ao gravar em uma planilha. Aqui está um exemplo com muitos formatos numéricos . Veja o código de exemplo abaixo.Tablib (poderoso, intuitivo): O Tablib é uma biblioteca mais poderosa e intuitiva para trabalhar com dados tabulares. Ele pode escrever pastas de trabalho do Excel com várias planilhas, além de outros formatos, como csv, json e yaml. Se você não precisar de células formatadas (como a cor de fundo), faça um favor a si mesmo para usar esta biblioteca, o que o levará mais longe a longo prazo.
csv (fácil): os arquivos no seu computador são de texto ou binários . Arquivos de texto são apenas caracteres, incluindo caracteres especiais como novas linhas e guias, e podem ser facilmente abertos em qualquer lugar (por exemplo, bloco de notas, navegador da Web ou produtos do Office). Um arquivo csv é um arquivo de texto formatado de uma certa maneira: cada linha é uma lista de valores, separados por vírgulas. Os programas Python podem ler e escrever texto com facilidade, portanto, um arquivo csv é a maneira mais fácil e rápida de exportar dados do seu programa python para o excel (ou outro programa python).
Os arquivos do Excel são binários e exigem bibliotecas especiais que conhecem o formato do arquivo, e é por isso que você precisa de uma biblioteca adicional para python ou de um programa especial como o Microsoft Excel, Gnumeric ou LibreOffice para lê-los / gravá-los.
fonte
Pesquisei alguns módulos do Excel para Python e achei o openpyxl o melhor.
O livro gratuito Automatize as coisas chatas com Python tem um capítulo sobre o openpyxl com mais detalhes ou você pode conferir o site Leia os documentos . Você não precisará do Office ou Excel instalado para usar o openpyxl.
Seu programa seria algo parecido com isto:
fonte
CSV significa valores separados por vírgula. O CSV é como um arquivo de texto e pode ser criado simplesmente adicionando a extensão .CSV
por exemplo, escreva este código:
você pode abrir este arquivo com o excel.
fonte
é
ou中
, é melhor fazer umf.write('\xEF\xBB\xBF')
logo após oopen()
. Essa é a lista técnica ( byte order mark , qv), necessária pelo software da Microsoft para reconhecer a codificação UTF-8fonte
Tente também dar uma olhada nas seguintes bibliotecas:
xlwings - para obter e obter dados de uma planilha do Python, além de manipular pastas de trabalho e gráficos
ExcelPython - um suplemento do Excel para escrever UDFs (funções definidas pelo usuário) e macros em Python, em vez de VBA
fonte
OpenPyxl
é uma biblioteca bastante boa, criada para ler / gravar arquivos xlsx / xlsm do Excel 2010:https://openpyxl.readthedocs.io/en/stable
A outra resposta , referindo-se a ela, está usando a função adiada (
get_sheet_by_name
). É assim que se faz sem ele:fonte
FileNotFoundError: [Errno 2] No such file or directory: 'New.xlsx'
openpyxl.load_workbook
carrega uma pasta de trabalho, que já está presente. Crie um arquivoNew.xlsx
para evitar esse erro.A
xlsxwriter
biblioteca é ótima para criar.xlsx
arquivos. O fragmento a seguir gera um.xlsx
arquivo a partir de uma lista de dictos ao declarar a ordem e os nomes exibidos :fonte
A maneira mais fácil de importar os números exatos é adicionar um decimal após os números no seu
l1
el2
. Python interpreta esse ponto decimal como instruções suas para incluir o número exato. Se precisar restringi-lo a alguma casa decimal, você poderá criar um comando de impressão que limite a saída, algo simples como:Restringiria à décima casa decimal, supondo que seus dados tenham dois números inteiros à esquerda da casa decimal.
fonte
Você pode tentar a biblioteca python orientada a objetos hfexcel amigável para humanos com base no XlsxWriter :
fonte
Se você precisar modificar uma pasta de trabalho existente, a maneira mais segura seria usar o pyoo . Você precisa ter algumas bibliotecas instaladas e são necessárias algumas etapas, mas uma vez configuradas, isso seria à prova de balas, pois você está aproveitando as APIs amplas e sólidas do LibreOffice / OpenOffice.
Por favor, veja meu Gist sobre como configurar um sistema Linux e fazer algumas codificações básicas usando pyoo.
Aqui está um exemplo do código:
fonte