2016-10-12 4 views
2

Es ist möglich, HTML-Seite aus einer CSV-Datei zu erstellen, mit den folgenden:Tabelle bearbeiten programmatisch passen Inhalt

import pandas as pd 

df = pd.read_csv('../data.csv',delimiter=';', engine='python') 
df.to_html('csv.html') 

Spaltenbreite dieser Tabelle den Header (Spaltentitel) Größe zu achten scheint aber für einige Spalten Der Inhalt ist größer als der Spaltentitel und wird in die nächste Zeile übernommen. Dies geschieht mit folgenden CSV, für die Mehrwort-Zellen (aaaaaaaaa aaaaaaaaa):

Name1;Name2;Name3;Name4;Name5 
1;aaaaaaaaa aaaaaaaaa;b;aaaaaaaaa aaaaaaaaa;aaaaaaaaa aaaaaaaaa 
2;aaaaaaaaa aaaaaaaaa;b;aaaaaaaaa aaaaaaaaa;aaaaaaaaa aaaaaaaaa 
3;aaaaaaaaa aaaaaaaaa;b;aaaaaaaaa aaaaaaaaa;aaaaaaaaa aaaaaaaaa 

Ich mag würde Spalten groß genug Breite, um Inhalte zu passen (vermeiden Zeilenumbruch). Wie kann ich programmgesteuert (mit Python) dorthin gelangen?

+0

Es scheint 'td { text-align: center; white-space: nowrap } 'tut ti. – KcFnMi

Antwort

1

Die Antwort basiert auf this.

import pandas as pd 

filename = 'csv.html' 

df = pd.read_csv('../data.csv',delimiter=';', engine='python') 

html_begin = '\ 
<meta charset="UTF-8">\n\ 
<html>\n\ 
<head><link rel="stylesheet" type="text/css" href="csv.css"></head>\n\ 
<body>\n\n' 

html_end = '\n\ 
</body>\n\ 
</html>\n' 

with open(filename, 'w') as f: 
    f.write(html_begin) 
    df.to_html(f) 
    f.write(html_end) 

Und csv.css ist wie:

table { 
    border: .5px solid lightgray; 
    border-collapse: collapse; 
    width: 100%; 
} 
th { 
    border: .5px solid lightgray; 
    text-align: center; 
} 
td { 
    border: .5px solid lightgray; 
    text-align: center; 
    white-space:nowrap 
} 

Alternativ (eine bessere Alternative ich sagen werde), kann man die CSS Notwendigkeit vermeiden und alles tun, über Pandas Style wie:

import pandas as pd 

filename = 'csv_style.html' 

df = pd.read_csv('../data.csv',delimiter=';', engine='python') 

style = df.style 
style.set_properties(**{'text-align': 'center', 
         'white-space': 'nowrap'}) 

with open(filename, 'w') as f: 
    f.write(style.render()) 
+1

möchten Sie vielleicht [Pandas Style Formatierung] (http://pandas.pydata.org/pandas-docs/stable/style.html) überprüfen, um es auf Pandas Art zu machen. [This] (http://stackoverflow.com/questions/36897366/pandas-to-html-using-the-style-options-or-custom-css) könnte auch interessant sein ... – MaxU

+0

Pandas Style ist ziemlich cool ! Interessanterweise hilft es nicht bei der Frage dieser Frage (oder ich weiß nicht, wie man Pandas Style benutzt, um dieses spezielle Problem zu lösen). – KcFnMi

+0

Die Frage wurde so bearbeitet, dass sie eine CSV-Datei enthält, in der das Problem veranschaulicht wird (Sie müssen das Browserfenster verkleinern, um die Umbruchfunktion anzuzeigen). – KcFnMi

Verwandte Themen