2016-01-12 8 views
3

У меня есть некоторые табличные данные с некоторыми длинными полями. Панды отрежут некоторые из длинных полей, как это:Таблицы в соответствии с шириной терминала в python?

  shortname            title \ 
0     shc      Shakespeare His Contemporaries 
1 folger-shakespeare   Folger Shakespeare Library Digital Texts 
2  perseus-c-greek       Perseus Canonical Greek 
3  stanford-1880s Adult British Fiction of the 1880s, Assembled ... 
4  reuters-21578          Reuters-21578 
5   ecco-tcp Eighteenth Century Collections Online/Text C... 

    centuries 
0 16th, 17th 
1 16th, 17th 
2   NaN 
3   NaN 
4   NaN 
5  18th 

и если я использую tabulate.tabulate(), это выглядит следующим образом:

- ------------------ -------------------------------------------------------------------------- ---------- 
0 shc     Shakespeare His Contemporaries            16th, 17th 
1 folger-shakespeare Folger Shakespeare Library Digital Texts         16th, 17th 
2 perseus-c-greek  Perseus Canonical Greek              nan 
3 stanford-1880s  Adult British Fiction of the 1880s, Assembled by the Stanford Literary Lab nan 
4 reuters-21578  Reuters-21578                nan 
5 ecco-tcp   Eighteenth Century Collections Online/Text Creation Partnership ECCO-TCP 18th 
- ------------------ -------------------------------------------------------------------------- ---------- 

В первом случае ширина устанавливаются примерно 80, Я предполагаю, и не расширяюсь, чтобы заполнить окно терминала. Я бы хотел, чтобы столбцы «shortname», «title» и «century» были в одной строке, поэтому это не работает.

Во втором случае ширина устанавливается на ширину данных, но это не сработает, если есть очень длинное название, и если у пользователя небольшое окно терминала, оно будет обернуто действительно странно.

Так что я ищу (предпочтительно легкий) способ в Python для точной печати табличных данных в соответствии с шириной терминала пользователя или, по крайней мере, позволяю мне указывать ширину терминала пользователя, которую я получу в другом месте , как tabulate(data, 120) для 120 столбцов. Есть ли способ сделать это?

ответ

2

Я понял это, немного похлопывая по документам pandas. Это то, что я сейчас делаю:

table = df[fields] 
width = pandas.util.terminal.get_terminal_size() # find the width of the user's terminal window 
pandas.set_option('display.width', width[0]) # set that as the max width in Pandas 
print(table)