Je suis nouveau sur Python. J'ai besoin d'écrire des données de mon programme dans une feuille de calcul. J'ai cherché en ligne et il semble y avoir de nombreux packages disponibles (xlwt, XlsXcessive, openpyxl). D'autres suggèrent d'écrire dans un fichier .csv (jamais utilisé CSV et ne comprennent pas vraiment ce que c'est).
Le programme est très simple. J'ai deux listes (float) et trois variables (strings). Je ne connais pas la longueur des deux listes et elles ne seront probablement pas de la même longueur.
Je veux que la mise en page soit comme dans l'image ci-dessous:
La colonne rose aura les valeurs de la première liste et la colonne verte aura les valeurs de la deuxième liste.
Alors, quelle est la meilleure façon de faire cela?
PS J'utilise Windows 7 mais je n'aurai pas nécessairement Office installé sur les ordinateurs exécutant ce programme.
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")
J'ai écrit ceci en utilisant toutes vos suggestions. Il fait le travail, mais il peut être légèrement amélioré.
Comment formater les cellules créées dans la boucle for (valeurs list1) en tant que scientifiques ou numériques?
Je ne veux pas tronquer les valeurs. Les valeurs réelles utilisées dans le programme auraient environ 10 chiffres après la virgule.
Réponses:
pour plus d'explications: https://github.com/python-excel
la source
xlwt
c'est uniquement pour écrire les anciens.xls
fichiers pour Excel 2003 ou une version antérieure. Cela peut être obsolète (selon vos besoins).Utilisez DataFrame.to_excel de pandas . Pandas vous permet de représenter vos données dans des structures de données fonctionnellement riches et vous permettra de lire fichiers Excel.
Vous devrez d'abord convertir vos données en DataFrame, puis les enregistrer dans un fichier Excel comme ceci:
et le fichier Excel qui sort ressemble à ceci:
Notez que les deux listes doivent être de longueur égale, sinon les pandas se plaindront. Pour résoudre ce problème, remplacez toutes les valeurs manquantes par
None
.la source
xlwt
aussi, mais j'obtenais uneopenpyxl
erreur. Pour tous ceux qui sont confus par cela, tout est dans le type de fichier souhaité. La documentation pandas (0.12) dit: "Les fichiers avec une.xls
extension seront écrits en utilisant xlwt et ceux avec une.xlsx
extension seront écrits en utilisant openpyxl".xlrd / xlwt (standard): Python n'a pas cette fonctionnalité dans sa bibliothèque standard, mais je considère xlrd / xlwt comme la manière "standard" de lire et d'écrire des fichiers Excel. Il est assez facile de créer un classeur, d'ajouter des feuilles, d'écrire des données / formules et de formater des cellules. Si vous avez besoin de toutes ces choses, vous aurez peut-être le plus de succès avec cette bibliothèque. Je pense que vous pourriez choisir openpyxl à la place et ce serait assez similaire, mais je ne l'ai pas utilisé.
Pour mettre en forme des cellules avec xlwt, définissez a
XFStyle
et incluez le style lorsque vous écrivez sur une feuille. Voici un exemple avec de nombreux formats de nombres . Voir l'exemple de code ci-dessous.Tablib (puissant, intuitif): Tablib est une bibliothèque plus puissante mais intuitive pour travailler avec des données tabulaires. Il peut écrire des classeurs Excel avec plusieurs feuilles ainsi que d'autres formats, tels que csv, json et yaml. Si vous n'avez pas besoin de cellules formatées (comme la couleur de fond), vous vous ferez une faveur pour utiliser cette bibliothèque, ce qui vous mènera plus loin à long terme.
csv (facile): Les fichiers sur votre ordinateur sont soit du texte ou binaire . Les fichiers texte ne sont que des caractères, y compris des caractères spéciaux comme les nouvelles lignes et les onglets, et peuvent être facilement ouverts n'importe où (par exemple, le bloc-notes, votre navigateur Web ou les produits Office). Un fichier csv est un fichier texte qui est formaté d'une certaine manière: chaque ligne est une liste de valeurs, séparées par des virgules. Les programmes Python peuvent facilement lire et écrire du texte, donc un fichier csv est le moyen le plus simple et le plus rapide d'exporter des données de votre programme python vers excel (ou un autre programme python).
Les fichiers Excel sont binaires et nécessitent des bibliothèques spéciales qui connaissent le format de fichier, c'est pourquoi vous avez besoin d'une bibliothèque supplémentaire pour python, ou d'un programme spécial comme Microsoft Excel, Gnumeric ou LibreOffice, pour les lire / écrire.
la source
J'ai étudié quelques modules Excel pour Python et j'ai trouvé openpyxl le meilleur.
Le livre gratuit Automate the Boring Stuff with Python contient un chapitre sur openpyxl avec plus de détails ou vous pouvez consulter le site Lire la documentation . Vous n'aurez pas besoin d'installer Office ou Excel pour utiliser openpyxl.
Votre programme ressemblerait à ceci:
la source
CSV signifie des valeurs séparées par des virgules. CSV est comme un fichier texte et peut être créé simplement en ajoutant le extension .CSV
par exemple écrivez ce code:
vous pouvez ouvrir ce fichier avec Excel.
la source
é
ou中
, vous feriez mieux de fairef.write('\xEF\xBB\xBF')
juste après leopen()
. C'est la nomenclature ( marque d'ordre d'octet , qv), nécessaire au logiciel Microsoft pour reconnaître l'encodage UTF-8la source
Essayez également de jeter un œil aux bibliothèques suivantes:
xlwings - pour obtenir des données dans et hors d'une feuille de calcul à partir de Python, ainsi que pour manipuler des classeurs et des graphiques
ExcelPython - un complément Excel pour écrire des fonctions définies par l'utilisateur (UDF) et des macros en Python au lieu de VBA
la source
OpenPyxl
est une bibliothèque assez sympa, construite pour lire / écrire des fichiers xlsx / xlsm Excel 2010:https://openpyxl.readthedocs.io/en/stable
L'autre réponse , qui y fait référence, utilise la fonction déperciée (
get_sheet_by_name
). Voici comment le faire sans cela:la source
FileNotFoundError: [Errno 2] No such file or directory: 'New.xlsx'
openpyxl.load_workbook
charge un classeur, qui est déjà présent. Créez un fichierNew.xlsx
pour éviter cette erreur.La
xlsxwriter
bibliothèque est idéale pour créer des.xlsx
fichiers. L'extrait.xlsx
de code suivant génère un fichier à partir d'une liste de dictés tout en indiquant l' ordre et les noms affichés :la source
Le moyen le plus simple d'importer les nombres exacts consiste à ajouter une décimale après les nombres dans votre
l1
etl2
. Python interprète ce point décimal comme des instructions de votre part pour inclure le nombre exact. Si vous devez le limiter à une décimale, vous devriez pouvoir créer une commande d'impression qui limite la sortie, quelque chose de simple comme:Le limiterait à la dixième décimale, en supposant que vos données aient deux entiers à gauche de la décimale.
la source
Vous pouvez essayer la bibliothèque python orientée objet hfexcel Human Friendly basée sur XlsxWriter :
la source
Si votre besoin est de modifier un classeur existant, le moyen le plus sûr serait d'utiliser pyoo . Vous devez avoir quelques bibliothèques installées et cela prend quelques obstacles pour sauter à travers mais une fois sa mise en place, ce serait à toute épreuve car vous exploitez les API larges et solides de LibreOffice / OpenOffice.
S'il vous plaît voir mon Gist sur la façon de configurer un système Linux et de faire un codage de base en utilisant pyoo.
Voici un exemple de code:
la source