Soy nuevo en Python. Necesito escribir algunos datos de mi programa 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 entiendo de qué se trata).
El programa es muy simple. Tengo dos listas (flotante) y tres variables (cadenas). No sé la longitud de las dos listas y probablemente no tendrán la misma longitud.
Quiero que el diseño sea como en la imagen a continuación:
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?
PD: Estoy ejecutando Windows 7 pero no necesariamente tendré Office instalado en las computadoras que ejecutan 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")
Escribí esto usando todas sus sugerencias. Hace el trabajo pero puede mejorarse ligeramente.
¿Cómo formateo las celdas creadas en el bucle for (valores list1) como científicas o numéricas?
No quiero truncar los valores. Los valores reales utilizados en el programa tendrían alrededor de 10 dígitos después del decimal.
Respuestas:
Para más explicaciones: https://github.com/python-excel
fuente
xlwt
es solo para escribir los.xls
archivos antiguos para Excel 2003 o anterior. Esto puede estar desactualizado (dependiendo de sus necesidades).Use DataFrame.to_excel de pandas . Pandas le permite representar sus datos en estructuras de datos funcionalmente ricas y también le permitirá leer en archivos de Excel.
Primero tendrá que convertir sus datos en un DataFrame y luego guardarlos en un archivo de Excel de esta manera:
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
.fuente
xlwt
también se usaba , pero recibí unopenpyxl
error. Para cualquier otra persona que se confunda con esto, todo está en el tipo de archivo que desea. Los documentos de pandas (0.12) dicen "Los archivos con una.xls
extensión se escribirán usando xlwt y aquellos con una.xlsx
extensión se escribirán usando openpyxl".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 el mayor éxito con esta biblioteca. Creo que podrías elegir openpyxl y sería bastante similar, pero no lo he usado.
Para formatear celdas con xlwt, defina ay
XFStyle
incluya el estilo cuando escriba en una hoja. Aquí hay un ejemplo con muchos formatos de números . Vea el 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, así como 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 a la larga.
csv (fácil): los archivos en su computadora son de texto o binarios . Los archivos de texto son solo caracteres, incluidos los especiales, como las nuevas líneas y las pestañas, 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 programas 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 de su programa de Python a Excel (u otro programa de Python).
Los archivos de Excel son binarios y requieren bibliotecas especiales que conocen el formato del archivo, por lo que necesita una biblioteca adicional para python, o un programa especial como Microsoft Excel, Gnumeric o LibreOffice, para leerlos / escribirlos.
fuente
Estudié algunos módulos de Excel para Python, y descubrí que openpyxl es el mejor.
El libro gratuito Automate the Boring Stuff with Python tiene un capítulo sobre openpyxl con más detalles o puede consultar el sitio Lea los documentos . No necesitará Office o Excel instalado para usar openpyxl.
Su programa se vería así:
fuente
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 escriba este código:
Puedes abrir este archivo con Excel.
fuente
é
o中
, es mejor que lo hagaf.write('\xEF\xBB\xBF')
justo después deopen()
. Esa es la lista de materiales ( byte order mark , qv), necesaria para que el software de Microsoft reconozca la codificación UTF-8fuente
Intente echar un vistazo a las siguientes bibliotecas también:
xlwings : para introducir y extraer datos de una hoja de cálculo desde Python, así como para manipular libros y gráficos
ExcelPython : un complemento de Excel para escribir funciones definidas por el usuario (UDF) y macros en Python en lugar de VBA
fuente
OpenPyxl
es una biblioteca bastante buena, construida para leer / escribir archivos Excel 2010 xlsx / xlsm:https://openpyxl.readthedocs.io/en/stable
La otra respuesta , refiriéndose a ella, es usar la función desproporcionada (
get_sheet_by_name
). Así es como hacerlo sin él:fuente
FileNotFoundError: [Errno 2] No such file or directory: 'New.xlsx'
openpyxl.load_workbook
carga un libro de trabajo, que ya está presente. Crea un archivoNew.xlsx
para evitar este error.La
xlsxwriter
biblioteca es excelente para crear.xlsx
archivos. El siguiente fragmento genera un.xlsx
archivo a partir de una lista de dictados mientras indica el orden y los nombres que se muestran :fuente
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
yl2
. Python interpreta este punto decimal como instrucciones de usted para incluir el número exacto. Si necesita restringirlo a un lugar decimal, debería poder crear un comando de impresión que limite la salida, algo simple como:Lo restringiría al décimo lugar decimal, suponiendo que sus datos tengan dos enteros a la izquierda del decimal.
fuente
Puede probar la biblioteca de python orientada a objetos hfexcel Human Friendly basada en XlsxWriter :
fuente
Si su necesidad es modificar un libro de trabajo existente, la forma más segura sería usar pyoo . Necesita tener algunas bibliotecas instaladas y se necesitan algunos aros para saltar, pero una vez que esté configurado, esto sería a prueba de balas, ya que está aprovechando las API amplias y sólidas de LibreOffice / OpenOffice.
Consulte mi Gist sobre cómo configurar un sistema Linux y hacer una codificación básica con pyoo.
Aquí hay un ejemplo del código:
fuente