以编程方式编辑表以适合内容

时间:2016-10-12 09:07:17

标签: python html css python-2.7 pandas

可以从CSV文件创建HTML页面,其中包含以下内容:

import pandas as pd

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

此表的列宽似乎与标题(列标题)大小相关,但对于某些列,内容大于列标题并被包装到下一行。对于多字单元格(aaaaaaaaa aaaaaaaaa),使用以下CSV会发生这种情况:

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

我想使列宽足够大以适应内容(避免自动换行)。我如何以编程方式(使用Python)到达那里?

1 个答案:

答案 0 :(得分:1)

答案基于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)

csv.css就像:

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
}

或者(我会说更好的选择),可以避免CSS需要并通过Pandas Style执行所有操作:

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())