Escribir en una hoja de cálculo de Excel

Soy nuevo en Python. Necesito escribir algunos datos de mi progtwig en una hoja de cálculo. He buscado en línea y parece que hay muchos paquetes disponibles (xlwt, XlsXcessive, openpyxl). Otros sugieren escribir en un archivo .csv (nunca usé CSV y realmente no entendemos qué es).

El progtwig es muy simple. Tengo dos listas (flotar) y tres variables (cadenas). No sé la longitud de las dos listas y probablemente no serán la misma longitud.

Quiero que el diseño sea como en la imagen de abajo:

Muestra de diseño

La columna rosa tendrá los valores de la primera lista y la columna verde tendrá los valores de la segunda lista.

Entonces, ¿cuál es la mejor manera de hacer esto?

PS Estoy ejecutando Windows 7 pero no necesariamente tendré Office instalado en las computadoras que ejecutan este progtwig.

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") 

Escribí esto usando todas tus sugerencias. Hace el trabajo, pero puede ser mejorado ligeramente.

¿Cómo formateo las celdas creadas en el bucle for (valores de list1) como científico o numérico?

No quiero truncar los valores. Los valores reales utilizados en el progtwig tendrían alrededor de 10 dígitos después del decimal.

 import xlwt def output(filename, sheet, list1, list2, x, y, z): book = xlwt.Workbook() sh = book.add_sheet(sheet) variables = [x, y, z] x_desc = 'Display' y_desc = 'Dominance' z_desc = 'Test' desc = [x_desc, y_desc, z_desc] col1_name = 'Stimulus Time' col2_name = 'Reaction Time' #You may need to group the variables together #for n, (v_desc, v) in enumerate(zip(desc, variables)): for n, v_desc, v in enumerate(zip(desc, variables)): sh.write(n, 0, v_desc) sh.write(n, 1, v) n+=1 sh.write(n, 0, col1_name) sh.write(n, 1, col2_name) for m, e1 in enumerate(list1, n+1): sh.write(m, 0, e1) for m, e2 in enumerate(list2, n+1): sh.write(m, 1, e2) book.save(filename) 

para más explicación: https://github.com/python-excel

Utilice DataFrame.to_excel de pandas . Pandas le permite representar sus datos en estructuras de datos funcionalmente ricas y también le permite leer en archivos de Excel.

Primero tendrá que convertir sus datos en un DataFrame y luego guardarlos en un archivo de Excel como este:

 In [1]: from pandas import DataFrame In [2]: l1 = [1,2,3,4] In [3]: l2 = [1,2,3,4] In [3]: df = DataFrame({'Stimulus Time': l1, 'Reaction Time': l2}) In [4]: df Out[4]: Reaction Time Stimulus Time 0 1 1 1 2 2 2 3 3 3 4 4 In [5]: df.to_excel('test.xlsx', sheet_name='sheet1', index=False) 

y el archivo de Excel que sale se ve así:

introduzca la descripción de la imagen aquí

Tenga en cuenta que ambas listas deben tener la misma longitud, de lo contrario los pandas se quejarán. Para resolver esto, reemplace todos los valores faltantes con None .

  • xlrd / xlwt (estándar): Python no tiene esta funcionalidad en su biblioteca estándar, pero creo que xlrd / xlwt es la forma “estándar” de leer y escribir archivos de Excel. Es bastante fácil hacer un libro de trabajo, agregar hojas, escribir datos / fórmulas y formatear celdas. Si necesita todas estas cosas, puede tener más éxito con esta biblioteca. Creo que podrías elegir openpyxl en su lugar y sería bastante similar, pero no lo he usado.

    Para formatear celdas con xlwt, defina un estilo XFStyle e incluya el estilo cuando escriba en una hoja. Aquí hay un ejemplo con muchos formatos de números . Ver código de ejemplo a continuación.

  • Tablib (potente, intuitivo): Tablib es una biblioteca más potente pero intuitiva para trabajar con datos tabulares. Puede escribir libros de Excel con varias hojas y otros formatos, como csv, json y yaml. Si no necesita celdas formateadas (como el color de fondo), se hará un favor para usar esta biblioteca, que lo llevará más lejos en el largo plazo.

  • csv (fácil): los archivos en su computadora son de texto o binarios . Los archivos de texto son solo caracteres, incluidos los especiales como nuevas líneas y tabs, y se pueden abrir fácilmente en cualquier lugar (por ejemplo, el bloc de notas, el navegador web o los productos de Office). Un archivo csv es un archivo de texto que está formateado de cierta manera: cada línea es una lista de valores, separados por comas. Los progtwigs de Python pueden leer y escribir texto fácilmente, por lo que un archivo csv es la forma más fácil y rápida de exportar datos desde su progtwig de Python a Excel (u otro progtwig de Python).

    Los archivos de Excel son binarios y requieren bibliotecas especiales que conocen el formato, por lo que necesita una biblioteca adicional para python, o un progtwig especial como Microsoft Excel, Gnumeric o LibreOffice, para leerlos o escribirlos.


 import xlwt style = xlwt.XFStyle() style.num_format_str = '0.00E+00' ... for i,n in enumerate(list1): sheet1.write(i, 0, n, fmt) 

CSV significa valores separados por comas. CSV es como un archivo de texto y se puede crear simplemente agregando la extensión .CSV

por ejemplo escribe este código:

 f = open('example.csv','w') f.write("display,variable x") f.close() 

Puedes abrir este archivo con excel.

 import xlsxwriter # Create an new Excel file and add a worksheet. workbook = xlsxwriter.Workbook('demo.xlsx') worksheet = workbook.add_worksheet() # Widen the first column to make the text clearer. worksheet.set_column('A:A', 20) # Add a bold format to use to highlight cells. bold = workbook.add_format({'bold': True}) # Write some simple text. worksheet.write('A1', 'Hello') # Text with formatting. worksheet.write('A2', 'World', bold) # Write some numbers, with row/column notation. worksheet.write(2, 0, 123) worksheet.write(3, 0, 123.456) # Insert an image. worksheet.insert_image('B5', 'logo.png') workbook.close() 

Intenta echar un vistazo a las siguientes bibliotecas también:

xlwings : para introducir y sacar datos de una hoja de cálculo de Python, así como para manipular libros y cuadros

ExcelPython : un complemento de Excel para escribir funciones definidas por el usuario (UDF) y macros en Python en lugar de VBA

Revisé algunos módulos de Excel para Python y encontré que openpyxl es el mejor.

El libro gratuito Automatizar las cosas aburridas con Python tiene un capítulo sobre openpyxl con más detalles o puede consultar el sitio Leer los documentos . No necesitarás tener instalado Office o Excel para usar openpyxl.

Su progtwig se vería algo como esto:

 import openpyxl wb = openpyxl.load_workbook('example.xlsx') sheet = wb.get_sheet_by_name('Sheet1') stimulusTimes = [1, 2, 3] reactionTimes = [2.3, 5.1, 7.0] for i in range(len(stimulusTimes)): sheet['A' + str(i + 6)].value = stimulusTimes[i] sheet['B' + str(i + 6)].value = reactionTimes[i] wb.save('example.xlsx') 

OpenPyxl es una biblioteca bastante agradable, creada para leer / escribir archivos xlsx / xlsm de Excel 2010:

https://openpyxl.readthedocs.io/en/stable

La otra respuesta , refiriéndose a ella, está usando la función get_sheet_by_name ( get_sheet_by_name ). Así es como hacerlo sin él:

 import openpyxl wbkName = 'New.xlsx' #The file should be created before running the code. wbk = openpyxl.load_workbook(wbkName) wks = wbk['test1'] someValue = 1337 wks.cell(row=10, column=1).value = someValue wbk.save(wbkName) wbk.close 

La forma más fácil de importar los números exactos es agregar un decimal después de los números en su l1 y l2 . Python interpreta este punto decimal como instrucciones tuyas para incluir el número exacto. Si necesita restringirlo a algún lugar decimal, debería poder crear un comando de impresión que limite la salida, algo tan simple como:

 print variable_example[:13] 

Lo restringiría al décimo lugar decimal, asumiendo que sus datos tienen dos enteros a la izquierda del decimal.