Python All: Tạo bảng với lớp PrettyTable


Khóa học qua video:
Lập trình Python All Lập trình C# All SQL Server All Lập trình C All Java PHP HTML5-CSS3-JavaScript
Đăng ký Hội viên
Tất cả các video dành cho hội viên

Lớp PrettyTable bên trong thư viện prettytable được sử dụng để tạo các bảng quan hệ trong Python.

Cài đặt Thư viện:

pip install prettytable

hoặc:

python -m pip install -U prettytable

Trong trường hợp pip không hoạt động bạn có thể tham khảo bài viết Cách kích hoạt pip.

Tạo bảng sử dụng phương thức add_row():

Cách 1: Đưa từng dòng vào:

from prettytable import PrettyTable
myTable = PrettyTable(["STT", "Mã sinh viên", "Họ và tên", "Điểm thi"])
# Hoặc:
# myTable = PrettyTable()
# myTable.field_names = ["STT", "Mã sinh viên", "Họ và tên", "Điểm thi"]

myTable = PrettyTable(["STT", "Mã sinh viên", "Họ và tên", "Điểm thi"])
myTable.add_row(["1", "HS001", "Nguyễn Ngọc Anh", "8.0"])
myTable.add_row(["2", "HS002", "Đặng Bá Nam", "8.5"])
myTable.add_row(["3", "HS003", "Lê Đức Tú", "7.2"])
myTable.add_row(["4", "HS004", "Mạc Văn Viên", "7.3"])
myTable.add_row(["5", "HS005", "Vũ Đình Toàn", "8.0"])
myTable.add_row(["6", "HS006", "Trần Bá Minh", "9.8"])
myTable.add_row(["7", "HS007", "Ngô Đình Tùng", "8.5"])
myTable.add_row(["8", "HS008", "Đỗ Hữu Nam", "7.7"])
print(myTable)

Cách 2: Đưa vào tất cả các dòng 1 lần:

from prettytable import PrettyTable
myTable = PrettyTable(["STT", "Mã sinh viên", "Họ và tên", "Điểm thi"])
# Hoặc:
# myTable = PrettyTable()
# myTable.field_names = ["STT", "Mã sinh viên", "Họ và tên", "Điểm thi"]

myTable.add_rows([
    ["1", "HS001", "Nguyễn Ngọc Anh", "8.0"],
    ["2", "HS002", "Đặng Bá Nam", "8.5"],
    ["3", "HS003", "Lê Đức Tú", "7.2"],
    ["4", "HS004", "Mạc Văn Viên", "7.3"],
    ["5", "HS005", "Vũ Đình Toàn", "8.0"],
    ["6", "HS006", "Trần Bá Minh", "9.8"],
    ["7", "HS007", "Ngô Đình Tùng", "8.5"],
    ["8", "HS008", "Đỗ Hữu Nam", "7.7"]])
print(myTable)

Kết quả:

Kết quả của việc tạo bảng sử dụng phương thức add_row()

Tạo bảng sử dụng phương thức add_row():

from prettytable import PrettyTable
myTable = PrettyTable()
columns = ["STT", "Mã sinh viên", "Họ và tên", "Điểm thi"]
myTable.add_column(columns[0], ["1", "2", "3", "4", "5", "6", "7", "8"])
myTable.add_column(columns[1], ["HS001", "HS002", "HS003", "HS004", "HS005", "HS006", "HS007", "HS008"])
myTable.add_column(columns[2], ["Nguyễn Ngọc Anh", "Đặng Bá Nam", "Lê Đức Tú", "Mạc Văn Viên", "Vũ Đình Toàn", "Trần Bá Minh", "Ngô Đình Tùng", "Đỗ Hưu Nam"])
myTable.add_column(columns[3], ["8.0", "8.5", "7.2", "7.3", "8.0", "9.8", "8.5", "7.7"])
print(myTable)

Kết quả:

Kết quả của việc tạo bảng sử dụng phương thức add_row()

Xóa hàng

myTable.del_row(0)

Thao tác này sẽ xóa hàng đầu tiên khỏi bảng, tức là các hàng tuân theo lập chỉ mục tiêu chuẩn bắt đầu từ chỉ mục 0. 

Xóa bảng

myTable.clear_rows()

Thao tác này sẽ xóa toàn bộ bảng (Chỉ còn lại Tên cột).

Trộn và kết hợp

Nếu bạn thực sự muốn, bạn thậm chí có thể trộn và kết hợp add_row và add_column để có thể xây dựng bảng theo các cách khác nhau. Tuy nhiên, các bảng được xây dựng có thể sẽ khiến người khác khó hiểu khi đọc.

Nhập dữ liệu từ tệp CSV

Nếu bạn có dữ liệu bảng của mình trong tệp giá trị được phân tách bằng dấu phẩy (.csv), bạn có thể đọc dữ liệu này vào PrettyTable như sau:

from prettytable import from_csv
with open("myfile.csv") as fp:
    mytable = from_csv(fp)

Nhập dữ liệu từ con trỏ cơ sở dữ liệu

Nếu bạn có dữ liệu bảng của mình trong cơ sở dữ liệu mà bạn có thể truy cập bằng thư viện xác nhận với Python DB-API (ví dụ: cơ sở dữ liệu SQLite có thể truy cập bằng sqlite mô-đun), thì bạn có thể tạo PrettyTable bằng đối tượng con trỏ, như sau:

import sqlite3
from prettytable import from_db_cursor

connection = sqlite3.connect("mydb.db")
cursor = connection.cursor()
cursor.execute("SELECT field1, field2, field3 FROM my_table")
mytable = from_db_cursor(cursor)

Lấy dữ liệu ra ngoài

Dưới đây là một số cách để lấy dữ liệu ra khỏi PrettyTable:

  • Phương thức del_row lấy một chỉ số nguyên của một hàng để xóa.
  • Phương thức del_column lấy tên trường của một cột để xóa.
  • Phương thức clear_rows không có đối số và xóa tất cả các hàng trong bảng - nhưng vẫn giữ nguyên tên trường để bạn có thể tạo lại nó với cùng một loại dữ liệu.
  • Phương thức clear không có đối số và xóa tất cả các hàng và tất cả các tên trường.

Hiển thị bảng theo dạng ASCII

Mục tiêu chính của PrettyTable là cho phép bạn in các bảng ở dạng ASCII một cách phù hợp.

In ấn

Để in một bảng ở dạng ASCII, bạn chỉ có thể làm như sau:

print(x)

Để truyền các tùy chọn thay đổi giao diện của bảng, hãy sử dụng phương thức get_string() như sau đây:

print(x.get_string())

Xâu chuỗi

Nếu bạn không muốn thực sự in bảng của mình ở dạng ASCII mà chỉ lấy một chuỗi chứa những gì sẽ được in nếu bạn sử dụng print(x), bạn có thể sử dụng phương thức get_string:

mystring = x.get_string()

Chuỗi này được đảm bảo trông giống hệt như những gì sẽ được in như khi dùng print(x). Giờ đây, bạn có thể thực hiện tất cả những việc thông thường mà bạn có thể làm với một chuỗi, chẳng hạn như ghi bảng của bạn vào một tệp hoặc chèn nó vào GUI.

Kiểm soát hiển thị dữ liệu

Nếu muốn, bạn có thể hạn chế đầu ra của print(x) hoặc x.get_string để chỉ gồm các trường hoặc hàng bạn thích.

Đối số fields cho các phương thức này nhận một danh sách các tên trường sẽ được in:

print(myTable.get_string(fields = ["STT", "Mã sinh viên"]))

Kết quả:

+-----+--------------+
| STT | Mã sinh viên |
+-----+--------------+
|  1  |    HS001     |
|  2  |    HS002     |
|  3  |    HS003     |
|  4  |    HS004     |
|  5  |    HS005     |
|  6  |    HS006     |
|  7  |    HS007     |
|  8  |    HS008     |
+-----+--------------+

Các đối số start và end lấy chỉ mục của hàng đầu tiên và gần cuối để in tương ứng. Lưu ý rằng lập chỉ mục hoạt động giống như cắt danh sách trong Python - để in các hàng thứ 2, 3 và 4 của bảng, hãy đặt start thành 1 (hàng đầu tiên là hàng 0, vì vậy hàng thứ hai là hàng 1) và đặt end thành 4 (chỉ mục là 3):

print(myTable.get_string(start = 1, end = 4))

Kết quả:

+-----+--------------+--------------+----------+
| STT | Mã sinh viên |  Họ và tên   | Điểm thi |
+-----+--------------+--------------+----------+
|  2  |    HS002     | Đặng Bá Nam  |   8.5    |
|  3  |    HS003     |  Lê Đức Tú   |   7.2    |
|  4  |    HS004     | Mạc Văn Viên |   7.3    |
+-----+--------------+--------------+----------+

Thay đổi căn chỉnh của các cột

Theo mặc định, tất cả các cột trong bảng đều được căn giữa.

Căn chỉnh tất cả các cột cùng lúc

Bạn có thể thay đổi căn chỉnh của tất cả các cột trong bảng cùng một lúc bằng cách gán một chuỗi ký tự cho thuộc tính align. Các chuỗi được phép là "l" (left), "r" (right), và "c":

myTable.align = "r"
print(myTable)

Kết quả:

+-----+--------------+-----------------+----------+
| STT | Mã sinh viên |       Họ và tên | Điểm thi |
+-----+--------------+-----------------+----------+
|   1 |        HS001 | Nguyễn Ngọc Anh |      8.0 |
|   2 |        HS002 |     Đặng Bá Nam |      8.5 |
|   3 |        HS003 |       Lê Đức Tú |      7.2 |
|   4 |        HS004 |    Mạc Văn Viên |      7.3 |
|   5 |        HS005 |    Vũ Đình Toàn |      8.0 |
|   6 |        HS006 |    Trần Bá Minh |      9.8 |
|   7 |        HS007 |   Ngô Đình Tùng |      8.5 |
|   8 |        HS008 |      Đỗ Hữu Nam |      7.7 |
+-----+--------------+-----------------+----------+

Căn chỉnh cho từng cột

Bạn cũng có thể thay đổi căn chỉnh cho các cột riêng lẻ dựa trên tên trường tương ứng bằng cách xử lý thuộc tính align như thể nó là một từ điển.

myTable.align["STT"] = "l"
myTable.align["Mã sinh viên"] = "c"
myTable.align["Họ và tên"] = "r"
myTable.align["Điểm thi"] = "c"
print(myTable)

Kết quả:

+-----+--------------+-----------------+----------+
| STT | Mã sinh viên |       Họ và tên | Điểm thi |
+-----+--------------+-----------------+----------+
| 1   |    HS001     | Nguyễn Ngọc Anh |   8.0    |
| 2   |    HS002     |     Đặng Bá Nam |   8.5    |
| 3   |    HS003     |       Lê Đức Tú |   7.2    |
| 4   |    HS004     |    Mạc Văn Viên |   7.3    |
| 5   |    HS005     |    Vũ Đình Toàn |   8.0    |
| 6   |    HS006     |    Trần Bá Minh |   9.8    |
| 7   |    HS007     |   Ngô Đình Tùng |   8.5    |
| 8   |    HS008     |      Đỗ Hữu Nam |   7.7    |
+-----+--------------+-----------------+----------+

Sắp xếp dữ liệu bảng theo cột

Bạn có thể đảm bảo rằng các bảng ASCII của mình được tạo với dữ liệu được sắp xếp theo một cột cụ thể bằng cách sử dụng đối số từ khóa sortby của get_string, đối số này phải là một chuỗi chứa tên của một cột.

Ví dụ sau sẽ sắp xếp dữ liệu bảng tăng dần theo cột "Họ và tên":

print(myTable.get_string(sortby="Họ và tên"))

Kết quả:

+-----+--------------+-----------------+----------+
| STT | Mã sinh viên |    Họ và tên    | Điểm thi |
+-----+--------------+-----------------+----------+
|  3  |    HS003     |    Lê Đức Tú    |   7.2    |
|  4  |    HS004     |   Mạc Văn Viên  |   7.3    |
|  1  |    HS001     | Nguyễn Ngọc Anh |   8.0    |
|  7  |    HS007     |  Ngô Đình Tùng  |   8.5    |
|  6  |    HS006     |   Trần Bá Minh  |   9.8    |
|  5  |    HS005     |   Vũ Đình Toàn  |   8.0    |
|  2  |    HS002     |   Đặng Bá Nam   |   8.5    |
|  8  |    HS008     |    Đỗ Hữu Nam   |   7.7    |
+-----+--------------+-----------------+----------+

Nếu ta muốn sắp xếp giảm dần thì ta sẽ sử dụng thêm đối số từ khóa reversesort=True.

Nếu bạn luôn muốn bảng của mình được sắp xếp thì ta làm như sau:

myTable.sortby = "Họ và tên" #sắp xếp tăng
myTable.reversesort = True #đảo ngược nếu muốn

Nếu bạn muốn tắt không sắp xếp dữ liệu bảng nữa thì ta làm như sau:

myTable.sortby = None

Nếu bạn muốn chỉ định một chức năng sắp xếp tùy chỉnh, bạn có thể sử dụng đối số từ khóa sort_key. Truyền vào đây một hàm chấp nhận hai danh sách giá trị và trả về giá trị âm hoặc dương tùy thuộc vào việc danh sách đầu tiên xuất hiện trước hay sau danh sách thứ hai. Nếu bảng của bạn có n cột, mỗi danh sách sẽ có n + 1 phần tử. Mỗi danh sách tương ứng với một hàng của bảng. Phần tử đầu tiên sẽ là bất kỳ dữ liệu nào trong hàng có liên quan, trong cột được chỉ định bởi đối số từ khóa sort_by. N phần tử còn lại là dữ liệu trong mỗi cột của bảng, theo thứ tự, bao gồm một thể hiện của dữ liệu lặp lại trong cột sort_by.

Thay đổi giao diện bảng

Theo mặc định, PrettyTable tạo ra các bảng ASCII trông giống như các bảng được sử dụng trong trình bao cơ sở dữ liệu SQL. Nhưng nó cũng có thể in chúng ở nhiều định dạng khác nhau. Nếu định dạng bạn muốn sử dụng là phổ biến, PrettyTable sẽ giúp bạn dễ dàng thực hiện điều này bằng phương thức set_style. Nếu bạn muốn tạo một bảng không phổ biến, bạn sẽ phải làm những việc khó hơn một chút (sẽ nói đến sau).

Thiết lập style cho bảng

Bạn có thể đặt style cho bảng của mình bằng phương thức set_style trước khi dùng đến print hoặc get_string. Dưới đây là cách in bảng ở định dạng hoạt động tốt với tính năng "Convert to table" của Microsoft Word:

from prettytable import PrettyTable
myTable = PrettyTable(["STT", "Mã sinh viên", "Họ và tên", "Điểm thi"])
myTable = PrettyTable(["STT", "Mã sinh viên", "Họ và tên", "Điểm thi"])
myTable.add_row(["1", "HS001", "Nguyễn Ngọc Anh", "8.0"])
myTable.add_row(["2", "HS002", "Đặng Bá Nam", "8.5"])
myTable.add_row(["3", "HS003", "Lê Đức Tú", "7.2"])
myTable.add_row(["4", "HS004", "Mạc Văn Viên", "7.3"])
myTable.add_row(["5", "HS005", "Vũ Đình Toàn", "8.0"])
myTable.add_row(["6", "HS006", "Trần Bá Minh", "9.8"])
myTable.add_row(["7", "HS007", "Ngô Đình Tùng", "8.5"])
myTable.add_row(["8", "HS008", "Đỗ Hữu Nam", "7.7"])

from prettytable import MSWORD_FRIENDLY
myTable.set_style(MSWORD_FRIENDLY)
print(myTable)

Kết quả:

| STT | Mã sinh viên |    Họ và tên    | Điểm thi |
|  1  |    HS001     | Nguyễn Ngọc Anh |   8.0    |
|  2  |    HS002     |   Đặng Bá Nam   |   8.5    |
|  3  |    HS003     |    Lê Đức Tú    |   7.2    |
|  4  |    HS004     |   Mạc Văn Viên  |   7.3    |
|  5  |    HS005     |   Vũ Đình Toàn  |   8.0    |
|  6  |    HS006     |   Trần Bá Minh  |   9.8    |
|  7  |    HS007     |  Ngô Đình Tùng  |   8.5    |
|  8  |    HS008     |    Đỗ Hữu Nam   |   7.7    |

Ngoài MSWORD_FRIENDLY ra thì ta có thể sử dụng các style đã có sẵn sau đây cho các bảng của mình:

  • DEFAULT - Giao diện mặc định, được sử dụng để hoàn tác bất kỳ thay đổi kiểu nào mà bạn có thể đã thực hiện
  • PLAIN_COLUMNS - Style không đường viền hoạt động tốt với các chương trình dòng lệnh cho dữ liệu cột
  • MARKDOWN - Một kiểu tuân theo cú pháp Markdown
  • ORGMODE - Kiểu bảng phù hợp với cú pháp của Org mode
  • SINGLE_BORDER và DOUBLE_BORDER - Kiểu sử dụng các đường viền đơn/đôi liên tục với các ký tự vẽ Hộp để hiển thị đẹp hơn trên thiết bị đầu cuối

Các style khác có thể sẽ xuất hiện trong các bản phát hành trong tương lai.

Thay đổi giao diện bảng theo hướng nâng cao

Nếu bạn muốn hiển thị bảng của mình theo một style khác biệt, bạn sẽ làm được nhưng sẽ phải thiết lập mọi thứ một cách khó khăn hơn một chút.

Tùy chọn style

PrettyTable có một số tùy chọn style kiểm soát các khía cạnh khác nhau của cách hiển thị bảng. Bạn có quyền tự do đặt từng tùy chọn này riêng lẻ thành bất kỳ tùy chọn nào bạn muốn. Phương thức set_style sẽ tự động thực hiện giúp cho bạn.

Các tùy chọn là:

  • border - Một tùy chọn boolean (phải là True hoặc False). Kiểm soát xem đường viền có được vẽ bên trong và xung quanh bảng hay không.
  • preserve_internal_border - Một tùy chọn boolean dùng để kiểm soát xem các đường viền vẫn được vẽ trong bảng ngay cả khi border=False.
  • header - Một tùy chọn boolean dùng để kiểm soát xem hàng đầu tiên của bảng có phải là tiêu đề hiển thị tên của tất cả các trường (các cột) hay không.
  • hrules - Kiểm soát việc in các đường kẻ ngang sau hàng. Các giá trị được phép là , , FRAMEHEADERALLNONE. Lưu ý rằng đây là các biến được định nghĩa bên trong mô-đun, vì vậy hãy đảm bảo rằng bạn phải import chúng hoặc sử dụng prettytableprettytable.FRAME
  • vrules - Kiểm soát việc in các đường kẻ dọc giữa các cột. Giá trị cho phép là: FRAMEALLNONE.
  • int_format - Một chuỗi kiểm soát cách dữ liệu số nguyên được in. Nó hoạt động như: print("%<int_format>d" % data)
  • float_format - Một chuỗi kiểm soát cách dữ liệu dấu chấm động được in. Nó hoạt động như: print("%<float_format>f" % data)
  • custom_format - Một từ điển của trường và callable. Điều này cho phép bạn đặt bất kỳ định dạng nào bạn muốn pf.custom_format["my_col_int"] = ()lambda f, v: f"{v:,}". Loại là callable nếu callable[[str, Any], str]
  • padding_width - Số lượng khoảng trắng ở hai bên dữ liệu cột (chỉ được sử dụng nếu có phần padding bên trái và bên phải là None).
  • left_padding_width - Số khoảng trắng ở phía bên trái của dữ liệu cột.
  • right_padding_width - Số khoảng trắng ở phía bên phải của dữ liệu cột.
  • vertical_char - Chuỗi ký tự đơn dùng để vẽ các đường thẳng đứng. Mặc định là |.
  • horizontal_char - Chuỗi ký tự đơn dùng để vẽ đường kẻ ngang. Mặc định là -.
  • _horizontal_align_char - chuỗi ký tự đơn dùng để biểu thị việc canh cột theo hàng ngang. Mặc định là : dành cho Markdown, còn lại là None.
  • junction_char - Chuỗi ký tự đơn dùng để vẽ các đường nối. Mặc định là +.
  • top_junction_char - Chuỗi ký tự đơn được sử dụng để vẽ các đường nối trên cùng. Mặc định là junction_char.
  • bottom_junction_char - chuỗi ký tự đơn dùng để vẽ các đường nối dòng dưới cùng. Mặc định là junction_char.
  • right_junction_char - chuỗi ký tự đơn dùng để vẽ các đường nối bên phải. Mặc định là junction_char.
  • left_junction_char - chuỗi ký tự đơn dùng để vẽ các đường nối bên trái. Mặc định là junction_char.
  • top_right_junction_char - chuỗi ký tự đơn được sử dụng để vẽ các đường nối trên cùng bên phải. Mặc định là junction_char.
  • top_left_junction_char - chuỗi ký tự đơn được sử dụng để vẽ các đường nối trên cùng bên trái. Mặc định là junction_char.
  • bottom_right_junction_char - chuỗi ký tự đơn được sử dụng để vẽ các đường nối dưới cùng bên phải. Mặc định là junction_char
  • bottom_left_junction_char - chuỗi ký tự đơn được sử dụng để vẽ các điểm nối dòng dưới cùng bên trái. Mặc định là junction_char.

Bạn có thể đặt các tùy chọn style cho cài đặt của riêng mình theo hai cách:

Đặt các tùy chọn style theo hướng thay đổi hẳn

Nếu bạn muốn in bảng của mình với một style theo hướng thay đổi hẳn, bạn có thể đặt tùy chọn của mình theo cách thay đổi các thuộc tính thích hợp. Nếu bạn muốn bảng của mình có đường viền, bạn có thể làm như sau:

myTable.border = False

Lưu ý rằng nếu bạn biết tùy chọn style nào bạn muốn vào lúc tạo bảng, bạn có thể chỉ định chúng bằng cách sử dụng các đối số từ khóa cho hàm tạo. Ví dụ: hai khối mã sau là tương đương:

myTable = PrettyTable()
myTable.border = False
myTable.header = False
myTable.padding_width = 5

#Tương đương:

myTable = PrettyTable(border=False, header=False, padding_width=5)

Thay đổi tùy chọn style chỉ một lần

Nếu bạn không muốn thực hiện các thay đổi hẳn style bằng cách thay đổi một thuộc tính như trên thì bạn có thể sử dụng get_string như sau:

print(myTable.get_string(border = False))

Thay đổi màu sắc cho bảng

PrettyTable có chức năng in bảng của bạn với mã màu ANSI. Để bắt đầu, hãy import lớp ColorTable thay vì import PrettyTable.

from prettytable.colortable import ColorTable

Lớp ColorTable có thể được sử dụng giống như PrettyTable, nhưng nó có thêm một thuộc tính bổ sung. Bây giờ bạn có thể chỉ định một chủ đề tùy chỉnh sẽ định dạng bảng của bạn bằng màu sắc.

from prettytable.colortable import ColorTable, Themes

myTable = ColorTable(theme=Themes.OCEAN)

print(myTable)

Tạo theme tùy chỉnh

Lớp Theme cho phép bạn tùy chỉnh cả ký tự và màu sắc được sử dụng trong bảng của mình.

Đối số Mô tả
default_color Màu để sử dụng làm mặc định
vertical_char, horizontal_charvàjunction_char Các ký tự được sử dụng để tạo đường viền của bảng
vertical_color, horizontal_colorvàjunction_color Màu sắc được sử dụng để tạo kiểu cho từng ký tự.

Lưu ý: Màu sắc được định dạng với  hàmTheme.format_code(s: str). Hàm này chấp nhận một chuỗi. Nếu chuỗi bắt đầu bằng mã thoát (như \x1b) thì nó sẽ trả về chuỗi đã cho. Nếu chuỗi chỉ là khoảng trắng, nó sẽ trả về "". Nếu chuỗi là một số (như "34"), nó sẽ tự động định dạng nó thành một mã thoát. Bạn nên xem mã nguồn để biết thêm thông tin.

Hiển thị bảng của bạn theo dạng JSON

PrettyTable cũng in được các bảng của bạn theo dạng JSON dưới dạng danh sách các trường và một mảng các hàng. Cũng giống như ở dạng ASCII, bạn thực sự có thể nhận được một biểu diễn chuỗi - đơn giản ta chỉ cần sử dụng get_json_string().

Hiển thị bảng của bạn ở dạng HTML

PrettyTable cũng sẽ in được các bảng ở dạng HTML, như <table>. Cũng giống như ở dạng ASCII, ta sẽ nhận được một biểu diễn chuỗi - chỉ cần sử dụng get_html_string(). In HTML có hỗ trợ các đối số fieldsstartendsortbyreversesort theo cách giống hệt như in ASCII.

Tạo kiểu bảng HTML

Theo mặc định, PrettyTable xuất ra HTML cho các bảng dạng "vani". Mã HTML khá đơn giản. Nó trông như thế này:

<table>
    <thead>
        <tr>
            <th>STT</th>
            <th>Mã sinh viên</th>
            <th>Họ và tên</th>
            <th>Điểm thi</th>
        </tr>
    </thead>
    <tbody>
        <tr>
            <td>1</td>
            <td>HS001</td>
            <td>Nguyễn Ngọc Anh</td>
            <td>8.0</td>
        </tr>
        <tr>
            <td>2</td>
            <td>HS002</td>
            <td>Đặng Bá Nam</td>
            <td>8.5</td>
        </tr>
        <tr>
            <td>3</td>
            <td>HS003</td>
            <td>Lê Đức Tú</td>
            <td>7.2</td>
        </tr>
        <tr>
            <td>4</td>
            <td>HS004</td>
            <td>Mạc Văn Viên</td>
            <td>7.3</td>
        </tr>
        <tr>
            <td>5</td>
            <td>HS005</td>
            <td>Vũ Đình Toàn</td>
            <td>8.0</td>
        </tr>
        <tr>
            <td>6</td>
            <td>HS006</td>
            <td>Trần Bá Minh</td>
            <td>9.8</td>
        </tr>
        <tr>
            <td>7</td>
            <td>HS007</td>
            <td>Ngô Đình Tùng</td>
            <td>8.5</td>
        </tr>
        <tr>
            <td>8</td>
            <td>HS008</td>
            <td>Đỗ Hữu Nam</td>
            <td>7.7</td>
        </tr>
    </tbody>
</table>

Nếu muốn, bạn có thể yêu cầu PrettyTable cố gắng bắt chước các tùy chọn style mà bảng của bạn đã đặt bằng cách sử dụng CSS nội tuyến. Điều này được thực hiện bằng cách sử dụng đối số từ khóa format=True của phương thức get_html_string. Lưu ý rằng nếu bạn luôn muốn in HTML được định dạng, bạn có thể làm như sau:

myTable.format = True

Thiết đặt thuộc tính HTML

Bạn có thể cung cấp từ điển các cặp name/value thuộc tính HTML cho phương thức get_html_string bằng cách sử dụng đối số từ khóa attributes. Điều này cho phép bạn chỉ định các thuộc tính HTML phổ biến như id và class có thể được sử dụng để liên kết đến các bảng của bạn hoặc tùy chỉnh giao diện của chúng bằng cách sử dụng CSS. Ví dụ:

print(myTable.get_html_string(attributes={"id": "my_table", "class": "red_table"}))

sẽ in ra:

<table id="my_table" class="red_table">
    <thead>
        <tr>
            <th>STT</th>
            <th>Mã sinh viên</th>
            <th>Họ và tên</th>
            <th>Điểm thi</th>
        </tr>
    </thead>
    <tbody>
        <tr>
            <td>1</td>
            <td>HS001</td>
            <td>Nguyễn Ngọc Anh</td>
            <td>8.0</td>
        </tr>
        <tr>
            <td>2</td>
            <td>HS002</td>
            <td>Đặng Bá Nam</td>
            <td>8.5</td>
        </tr>
        <tr>
            <td>3</td>
            <td>HS003</td>
            <td>Lê Đức Tú</td>
            <td>7.2</td>
        </tr>
        <tr>
            <td>4</td>
            <td>HS004</td>
            <td>Mạc Văn Viên</td>
            <td>7.3</td>
        </tr>
        <tr>
            <td>5</td>
            <td>HS005</td>
            <td>Vũ Đình Toàn</td>
            <td>8.0</td>
        </tr>
        <tr>
            <td>6</td>
            <td>HS006</td>
            <td>Trần Bá Minh</td>
            <td>9.8</td>
        </tr>
        <tr>
            <td>7</td>
            <td>HS007</td>
            <td>Ngô Đình Tùng</td>
            <td>8.5</td>
        </tr>
        <tr>
            <td>8</td>
            <td>HS008</td>
            <td>Đỗ Hữu Nam</td>
            <td>7.7</td>
        </tr>
    </tbody>
</table>

Sao chép bảng

Bạn có thể gọi phương thức copy để tạo một bản sao của bảng.

myTable1 = myTable.copy()
print(myTable1)

Nếu bạn chỉ muốn một bản sao bảng mà chỉ bao gồm một số hàng thì bạn có thể làm như sau:

#copy 3 hàng đầu tiên của bảng myTable 
myTable1 = myTable[0:3]
print(myTable1)
» Tiếp: Assignment 07
« Trước: Getter và Setter (thiết lập thông thường, sử dụng property(), @property)
Khóa học qua video:
Lập trình Python All Lập trình C# All SQL Server All Lập trình C All Java PHP HTML5-CSS3-JavaScript
Đăng ký Hội viên
Tất cả các video dành cho hội viên
Copied !!!