dark-river 发表于 2022-1-9 20:11:14

prettytable中有什么好办法将中文内容对齐

使用prettytable,发现有中文内容时,表格很难对齐,这个怎么办,请指教,谢谢。

import prettytable as pt

x = pt.PrettyTable()
x.field_names=(['书名', '作者', '定价', '库存数量'])
library = [
    {'bookname': '三体', 'author': '刘慈欣', 'price': 25, 'quality': 5},
    {'bookname': '流浪地球', 'author': '刘慈欣', 'price': 30, 'quality': 10},
    {'bookname': '雪中悍刀行', 'author': '风雪戏诸侯', 'price': 38, 'quality': 15},
    {'bookname': '风声鹤唳', 'author': '君不贱', 'price': 40, 'quality': 7},
    {'bookname': '两京十五日', 'author': '马伯庸', 'price': 28, 'quality': 12},
    {'bookname': '余罪', 'author': '常书欣', 'price': 70, 'quality': 33},
    {'bookname': '长安十二时辰', 'author': '马伯庸', 'price': 28, 'quality': 10}
]

for book in library:
    x.add_row(book.values())

print(x)
+--------------+------------+------+----------+
|   书名   |    作者    | 定价 | 库存数量 |
+--------------+------------+------+----------+
|   三体   |   刘慈欣   |25|    5   |
|   流浪地球   |   刘慈欣   |30|    10    |
|雪中悍刀行| 风雪戏诸侯 |38|    15    |
|   风声鹤唳   |   君不贱   |40|    7   |
|两京十五日|   马伯庸   |28|    12    |
|   余罪   |   常书欣   |70|    33    |
| 长安十二时辰 |   马伯庸   |28|    10    |
+--------------+------------+------+----------+

Process finished with exit code 0

傻眼貓咪 发表于 2022-1-9 21:18:48

中文输出很难对齐的,可以自己写方法,没有很难,不用另外下载模组:names = ['书名', '作者', '定价', '库存数量']
library = [
    {'bookname': '三体', 'author': '刘慈欣', 'price': 25, 'quality': 5},
    {'bookname': '流浪地球', 'author': '刘慈欣', 'price': 30, 'quality': 10},
    {'bookname': '雪中悍刀行', 'author': '风雪戏诸侯', 'price': 38, 'quality': 15},
    {'bookname': '风声鹤唳', 'author': '君不贱', 'price': 40, 'quality': 7},
    {'bookname': '两京十五日', 'author': '马伯庸', 'price': 28, 'quality': 12},
    {'bookname': '余罪', 'author': '常书欣', 'price': 70, 'quality': 33},
    {'bookname': '长安十二时辰', 'author': '马伯庸', 'price': 28, 'quality': 10}
]

a, b, c, d = names
print("+----------------+------------+------+----------+")
print(f"| {a:^12} | {b:^8} | {c:^2} | {d:^4} |")
print("+----------------+------------+------+----------+")
for book in library:
    a, b, c, d = book.keys()
    print(f"| {book:^{14 - len(book)}} | {book:^{10 - len(book)}} | {book:^4} | {book:^8} |")
print("+----------------+------------+------+----------+")+----------------+------------+------+----------+
|      书名      |    作者    | 定价 | 库存数量 |
+----------------+------------+------+----------+
|      三体      |   刘慈欣   |25|    5   |
|    流浪地球    |   刘慈欣   |30|    10    |
|   雪中悍刀行   | 风雪戏诸侯 |38|    15    |
|    风声鹤唳    |   君不贱   |40|    7   |
|   两京十五日   |   马伯庸   |28|    12    |
|      余罪      |   常书欣   |70|    33    |
|长安十二时辰|   马伯庸   |28|    10    |
+----------------+------------+------+----------+

hrpzcf 发表于 2022-1-9 21:48:40

本帖最后由 hrpzcf 于 2022-1-9 21:57 编辑

换个控制台运行,在pycharm上中文对齐不好,在cmd或者powershell中中文对齐比较好,windows terminal也不错。
如果一定要在编辑器里运行,vscode的集成终端也不错。

vscode集成终端:




Windows Terminal:

dark-river 发表于 2022-1-12 11:01:29

hrpzcf 发表于 2022-1-9 21:48
换个控制台运行,在pycharm上中文对齐不好,在cmd或者powershell中中文对齐比较好,windows terminal也不错 ...

谢谢。看来还是开发环境的问题,不纠结了。
页: [1]
查看完整版本: prettytable中有什么好办法将中文内容对齐