Übersicht / Ziele
Ich kann die CSV-Datei nicht in Tabellenform abfragen, da auf meinem tragbaren Notebook kein Excel installiert ist.
Eine Tabelle kann als Ersatz verwendet werden, Sie müssen jedoch eine Verbindung zum Internet herstellen, um sie in einer Tabelle anzuzeigen, und Sie möchten keine nutzlose Paketkommunikation durchführen.
Offline reicht aus, um CSV-Dateien abzufragen.
Als ich unterschiedlich gegoogelt habe, habe ich festgestellt, dass die Pandas-Bibliothek von Python auch CSV-Dateien lesen und HTML ausgeben kann.
Erstellen Sie ein Programm, das eine CSV-Datei liest und in einem Browser anzeigt, um Python zu studieren.
Umgebung
- Windows10
- python 3.8.1
- VSCode
Dinge zu tun, um zu tun
- Installieren Sie Pandas mit Pip
- Erstellen Sie ein Python-Programm
- Im Browser anzeigen
Installieren Sie Pandas mit Pip
Führen Sie den üblichen Befehl pip install pandas
im Terminal von VSCode aus.
Irgendwie tritt ein Fehler auf ... Da es sich um ein Zeichen handelt, das vor dem Schreiben der Quelle einen unerwarteten Fehler zeichnet, wird erwartet, dass ein solcher Fehler auftritt.
(1)
ERROR: Could not install packages due to an EnvironmentError: [WinError 5]Zugriff verweigert.: '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) ... Der Zugriff wird verweigert oder Berechtigungen werden angezeigt, daher handelt es sich wahrscheinlich um eine Autorität.
Ich habe das VSCode-Terminal aufgegeben, die Eingabeaufforderung als Administrator gestartet und den Befehl pip ausgeführt, und die Installation war erfolgreich.
(2) Es wird eine Warnung ausgegeben, da die mit python3.8.1 installierte Version von pip alt ist.
Der in '' angezeigte Befehl wurde ausgeführt und der Pip wurde vor der Ausführung von (1) aktualisiert.
Erstellen Sie ein Python-Programm
Lesen Sie die CSV-Datei mit read_csv () von Pandas, konvertieren Sie die CSV-Daten mit to_html () in
und schreiben Sie sie in HTML.
Wenn die gelesene CSV-Datei ein Leerzeichen enthält, wird es als fehlender Wert behandelt und in NaN konvertiert. Konvertieren Sie es daher nicht mit "na_filter = False".
Der CSV-Dateiname wird im Titel von HTML angezeigt.
main.py
import os
import pandas as pd
import sys
def main():
#Holen Sie sich die CSV-Datei aus Argument 1
args = sys.argv
haserror = False
csvfile = ''
#Kein Argument ist ein Fehler
if 1 == len(args):
print("Es ist keine CSV-Datei angegeben.")
haserror = True
else:
csvfile = args[1]
#Fehler, wenn der Dateiname falsch ist
if os.path.exists(csvfile) == False:
print("Die angegebene Datei existiert nicht.")
haserror = True
#Wenn es sich nicht um eine CSV-Datei handelt, tritt ein Fehler auf.
if csvfile.endswith(".csv") == False:
print("Eine andere Datei als die CSV-Datei wird angegeben.")
haserror = True
if haserror == True:
return()
else:
print("Konvertieren Sie die CSV-Datei in HTML.")
#CSV-Datei lesen
csvdata = pd.read_csv(csvfile, na_filter=False)
#HTML-Datei lesen
htmldata = ''
with open('templete.html',mode='r',encoding='utf-8') as htmlfile:
htmldata = htmlfile.read()
#Konvertieren Sie die CSV-Datei in HTML
rpdict = { "filename" : os.path.basename(csvfile), "table" : csvdata.to_html() }
htmldata = htmldata.format(**rpdict)
#Ausgabe der HTML-Datei
with open('csvconverted.html',mode='w',encoding='utf-8') as outputhtml:
outputhtml.write(htmldata)
if __name__== '__main__':
main()
Vor der Konvertierung 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>
Nach der Konvertierung 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>Datum</th>
<th>Urlaubsklassifizierung</th>
<th>Anwesenheitszeit</th>
<th>Zeit lassen</th>
<th>Arbeitszeit</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>Feiertage</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>
Zurückblicken
- Der Inhalt der in die HTML-Datei ausgegebenen CSV-Datei wurde verstümmelt. Da die Codierung in open () nicht angegeben wurde, wird sie mit dem Standardzeichencode (shift-jis) verarbeitet. Geändert, um verstümmelte Zeichen durch Angabe von encoding = 'utf-8' zu vermeiden.
- KeyError ist beim Ausführen von format () für das Feld aufgetreten, das den Dateinamen und den CSV-Inhalt in templete.html ausgibt. Ursprünglich wurde das Format (key = "") an zwei Stellen codiert. Wenn Sie jedoch eins nach dem anderen formatieren, wird es durch das angegebene Schlüsselelement aus der Zielzeichenfolge ersetzt, sodass ein Schlüsselelement vorhanden sein muss, das nicht ersetzt wurde. War ein KeyError. Es ist schwierig, das Format zu verwenden ... Das Ersetzungsziel wurde im Schlüsselwertformat-Wörterbuchformat deklariert, und das Format konnte durch Angabe des Wörterbuchs korrekt ersetzt werden.
https://github.com/otowmoyarng/FreeStudyRepo/tree/master/20191228-pythoncsvviewer