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:
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í:
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.