Aperçu / objectifs
Je ne peux pas interroger le fichier csv au format tabulaire car je n'ai pas Excel installé sur mon ordinateur portable.
Une feuille de calcul peut être utilisée comme substitut, mais vous avez besoin d'une connexion Internet pour l'afficher dans une feuille de calcul, et vous ne voulez pas de communication par paquets inutile.
Hors ligne suffit pour interroger les fichiers CSV.
Lorsque j'ai cherché sur Google de diverses manières, j'ai trouvé que la bibliothèque pandas de python pouvait également lire des fichiers CSV et générer du HTML.
Créez un programme qui lit un fichier csv et l'affiche sur un navigateur dans le but d'étudier Python.
environnement
- Windows10
- python 3.8.1
- VSCode
Choses à faire, ordre à faire
- Installez les pandas avec pip
- Créez un programme python
- Afficher dans le navigateur
Installer des pandas avec pip
Exécutez la commande habituelle pip install pandas
dans le terminal de VSCode.
D'une manière ou d'une autre, une erreur se produit ... Comme il s'agit d'un caractère qui dessine une erreur inattendue avant d'écrire la source, on s'attend à ce qu'une telle erreur se produise.
(1)
ERROR: Could not install packages due to an EnvironmentError: [WinError 5]Accès refusé.: 'c:\\program files\\python38\\lib\\site-packages\\pip-19.2.3.dist-info\\entry_points.txt'
Consider using the `--user` option or check the permissions.
(2)
WARNING: You are using pip version 19.2.3, however version 19.3.1 is available.
You should consider upgrading via the 'python -m pip install --upgrade pip' command.
(1) ... L'accès est refusé ou les autorisations sont affichées, c'est donc probablement une autorité.
J'ai abandonné le terminal VSCode, démarré l'invite de commande en tant qu'administrateur et exécuté la commande pip, et l'installation a réussi.
(2) Un avertissement est émis car la version de pip installée avec python3.8.1 est ancienne.
La commande affichée dans '' a été exécutée et le pip a été mis à niveau avant l'exécution de (1).
Créer un programme python
Lisez le fichier CSV avec read_csv () de pandas, convertissez les données CSV en
avec to_html () et écrivez-le en html.
S'il y a un blanc dans le fichier CSV lu, il sera traité comme une valeur manquante et converti en NaN, donc ne le convertissez pas avec na_filter = False
.
Le nom du fichier CSV est affiché dans le titre de html.
main.py
import os
import pandas as pd
import sys
def main():
#Récupère le fichier CSV à partir de l'argument 1
args = sys.argv
haserror = False
csvfile = ''
#Aucun argument n'est une erreur
if 1 == len(args):
print("Aucun fichier CSV n'est spécifié.")
haserror = True
else:
csvfile = args[1]
#Erreur si le nom du fichier est incorrect
if os.path.exists(csvfile) == False:
print("Le fichier spécifié n'existe pas.")
haserror = True
#S'il ne s'agit pas d'un fichier CSV, une erreur se produira.
if csvfile.endswith(".csv") == False:
print("Un fichier autre que le fichier CSV est spécifié.")
haserror = True
if haserror == True:
return()
else:
print("Convertissez le fichier CSV en html.")
#Lire le fichier CSV
csvdata = pd.read_csv(csvfile, na_filter=False)
#Lire le fichier html
htmldata = ''
with open('templete.html',mode='r',encoding='utf-8') as htmlfile:
htmldata = htmlfile.read()
#Convertir un fichier CSV en html
rpdict = { "filename" : os.path.basename(csvfile), "table" : csvdata.to_html() }
htmldata = htmldata.format(**rpdict)
#sortie de fichier html
with open('csvconverted.html',mode='w',encoding='utf-8') as outputhtml:
outputhtml.write(htmldata)
if __name__== '__main__':
main()
Avant la conversion html
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title> {filename} </title>
<link rel="stylesheet" type="text/css" href="style.css"/>
</head>
<body>
<div class="csvlist">
{table}
</div>
</body>
</html>
Après la conversion html
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title> test.csv </title>
<link rel="stylesheet" type="text/css" href="style.css"/>
</head>
<body>
<div class="csvlist">
<table border="1" class="dataframe">
<thead>
<tr style="text-align: right;">
<th></th>
<th>Date</th>
<th>Classement vacances</th>
<th>Temps de présence</th>
<th>Laisser le temps</th>
<th>temps de travail</th>
</tr>
</thead>
<tbody>
<tr>
<th>0</th>
<td>2019/12/1</td>
<td>Hokyu</td>
<td>09:00</td>
<td>13:00</td>
<td>04:00</td>
</tr>
<tr>
<th>1</th>
<td>2019/12/2</td>
<td></td>
<td>09:00</td>
<td>21:30</td>
<td>11:30</td>
</tr>
<tr>
<th>2</th>
<td>2019/12/3</td>
<td></td>
<td>09:00</td>
<td>21:30</td>
<td>11:30</td>
</tr>
<tr>
<th>3</th>
<td>2019/12/4</td>
<td></td>
<td>09:00</td>
<td>21:00</td>
<td>11:00</td>
</tr>
<tr>
<th>4</th>
<td>2019/12/5</td>
<td></td>
<td>09:00</td>
<td>20:00</td>
<td>10:00</td>
</tr>
<tr>
<th>5</th>
<td>2019/12/6</td>
<td></td>
<td>09:00</td>
<td>20:00</td>
<td>10:00</td>
</tr>
<tr>
<th>6</th>
<td>2019/12/7</td>
<td>Vacances publiques</td>
<td></td>
<td></td>
<td></td>
</tr>
<tr>
<th>7</th>
<td>2019/12/8</td>
<td>Hokyu</td>
<td></td>
<td></td>
<td></td>
</tr>
</tbody>
</table>
</div>
</body>
</html>
Regarder en arrière
- Le contenu de la sortie du fichier CSV dans le fichier html était déformé. Comme l'encodage n'a pas été spécifié dans open (), il sera traité avec le code de caractère par défaut (shift-jis). Modifié pour éviter les caractères déformés en spécifiant encoding = 'utf-8'.
- Une erreur KeyError s'est produite lors de l'exécution de format () pour le champ qui renvoie le nom de fichier et le contenu csv dans templete.html. Initialement, format (key = "") était codé à deux endroits, mais si vous formatez un par un, il sera remplacé par l'élément clé spécifié dans la chaîne de caractères cible, il doit donc y avoir un élément clé qui n'a pas été remplacé. Était une KeyError. Il est difficile d'utiliser le format ... La cible de remplacement a été déclarée au format dictionnaire de format clé-valeur, et le format a pu être remplacé correctement en spécifiant le dictionnaire.
- J'ai été surpris que ce soit facile à gérer car le résultat de l'exécution de read_csv () peut être appelé un type de tableau à deux dimensions.
Cliquez ici pour le produit
https://github.com/otowmoyarng/FreeStudyRepo/tree/master/20191228-pythoncsvviewer