Làm cách nào để căn chỉnh dữ liệu trong python?

Nếu bạn không hiểu rõ về tôi, hãy nói như vậy và tôi sẽ cố gắng giải thích chi tiết hơn + mọi trợ giúp đều được đánh giá cao, cảm ơn

Những gì tôi đã thử

tôi đã thử

import os


def align_column(items, length):
    res = []
    for index, item in enumerate(items):
        item_length = len(item)
        if item_length < length[index]:
            res.append(item + " " * (length[index] - item_length))
        else:
            res.append(item)
    return "|" + "|".join(res) + "|"

def has_data(file, res1=True):
    if not os.path.exists(file):
        res1 = False
    else:
        with open(file) as f:
            if not f.read():
                res1 = False
    return res1
def solution(file_name="data.txt"):
    header = ['test123', 'test12345', 'test123', 'test12345']
    data = ['test12345', 'test12345678', 'test12345678', 'test12345'] 
    length = [len(max(item, key=len)) for item in zip(header, data)]   
    length_total = sum(length) + len(length) + 1   
    if not has_data(file_name):  
        contents = ["_" * length_total]
        contents.append(align_column(header, length))
        contents.append("|" + "-" * (length_total - 2) + "|")
        contents.append(align_column(data, length))
        contents.append("|" + "^" * (length_total - 2) + "|")

        with open(file_name, "w") as f:
            f.write("\n".join(contents))
    else:
        with open(file_name) as f:
            contents = f.readlines()[:-1]

            contents.append("|" + "=" * (length_total - 2))
            contents.append(align_column(data, length))
            contents.append("|" + "^" * (length_total - 2))

            with open(file_name, "w") as f2:
                f2.write("\n".join(contents))


solution()

Nhưng nó chỉ căn chỉnh phần dữ liệu đầu tiên với tiêu đề thôi nhưng phần còn lại của dữ liệu/dữ liệu mới thì nó không căn chỉnh và tôi đã thử trộn nó với câu lệnh khác nhưng nó không hoạt động

Trong bài đăng trước, chúng ta đã học cách kiểm soát độ chính xác của số chúng ta in cũng như số khoảng trống mà các số này chiếm. Điều cuối cùng chúng ta cần học để xuất ra các bảng dữ liệu đẹp là cách căn chỉnh văn bản và số khi chúng ta sử dụng

L x                    R
L          x           R
L                    x R
1

Căn chỉnh văn bản và số với. định dạng()

Trước đây chúng ta đã học cách chỉ định số lượng khoảng trống được phân bổ cho đầu vào mà chúng ta cung cấp cho

L x                    R
L          x           R
L                    x R
1. Bây giờ chúng ta sẽ thấy rằng chúng ta có thể cho Python biết cách chúng ta muốn căn chỉnh văn bản hoặc số của mình trong các khoảng trắng này. Chúng ta có thể điều chỉnh trái (
L x                    R
L          x           R
L                    x R
3), điều chỉnh phải (
L x                    R
L          x           R
L                    x R
0) và căn giữa (
L x                    R
L          x           R
L                    x R
1) các giá trị của mình. Đây là một ví dụ ngắn gọn

# Example 1
print('L {:<20} R'.format('x'))
# Example 2
print('L {:^20} R'.format('x'))
# Example 3
print('L {:>20} R'.format('x'))

Đầu ra của những ví dụ này là

L x                    R
L          x           R
L                    x R

Tuyệt đấy. Chúng tôi đã yêu cầu Python để lại 20 khoảng trắng cho văn bản mà chúng tôi muốn nhập và tùy thuộc vào ký hiệu mà chúng tôi đã chỉ định, chúng tôi có thể thay đổi cách biện minh cho văn bản của mình

Bạn thậm chí có thể chỉ định ký tự bạn muốn sử dụng thay vì khoảng trống

print ('{:=<20}'.format('hello'))
print ('{:_^20}'.format('hello'))
print ('{:.>20}'.format('hello'))

Đầu ra của những ví dụ này là

hello===============
_______hello________
...............hello

Như bạn có thể thấy,

L x                    R
L          x           R
L                    x R
1 có rất nhiều lựa chọn. Truy cập tài liệu về chuỗi hoặc trang web hữu ích này nếu bạn muốn tìm hiểu thêm

Để tất cả chúng cùng nhau

Khi làm việc với dữ liệu, chúng ta thường muốn xem nhanh để đảm bảo không có sai sót nào và để xem liệu có bất kỳ mẫu nào không. Một cách để làm điều này là vẽ biểu đồ dữ liệu của bạn. Tuy nhiên, một số loại dữ liệu có xu hướng được trình bày tốt hơn trong một bảng có cấu trúc độc đáo

Đối với ví dụ này, chúng tôi sẽ làm việc với một số dữ liệu được tạo sẵn

data = [['NAME', 'AGE', 'HANDEDNESS', 'SCORE (%)'],
        ['Martin', 38, 'L', 54.123],
        ['Marty', 33, 'L', 32.438],
        ['Martine', 25, 'R', 71.128],
        ['Martyn', 59, 'R', 50.472],
        ['Mart', 23, 'L', 2.438],
        ['Martyne', 15, 'R', 71.128],
        ['Marlyn', 101, 'R', 0.472],
        ['Marti', 2, 'L', 55.438],
        ['Mardi', 9, 'R', 81.128],
        ['Martyne', 49, 'R', 24.472],
        ['Marteen', 91, 'L', 1.128]]

Lưu ý rằng hàng dữ liệu đầu tiên (

L x                    R
L          x           R
L                    x R
3) chứa các nhãn cột. Các hàng khác chứa dữ liệu cho từng chủ đề

Như bạn có thể nghi ngờ, việc chạy

L x                    R
L          x           R
L                    x R
4 không mang lại kết quả tốt (hãy tự mình thử để xem. ). A better solution is to apply what we have learned to generate a nice table. Đây là mã

L x                    R
L          x           R
L                    x R
0

Đầu ra của mã này trông như thế này

L x                    R
L          x           R
L                    x R
1

Về mã, trước tiên chúng tôi tạo một biến có tên là

L x                    R
L          x           R
L                    x R
5 chứa 40 dấu gạch ngang

Đoạn mã sau đó được lặp qua từng mục trong số 12 mục trong biến

L x                    R
L          x           R
L                    x R
6 của chúng tôi. Nếu chúng tôi đang giải quyết mặt hàng đầu tiên của mình (tôi. e. ,
L x                    R
L          x           R
L                    x R
7), chúng tôi nói với Python rằng chúng tôi muốn in một dòng dấu gạch ngang, sau đó in tiêu đề của chúng tôi, theo sau là một dòng dấu gạch ngang khác. Lưu ý cách chúng tôi chỉ định số lượng khoảng trắng chúng tôi muốn cho mỗi tiêu đề cũng như căn chỉnh văn bản

Đối với tất cả các mục khác trong biến

L x                    R
L          x           R
L                    x R
6 của chúng tôi, chúng tôi in văn bản và giá trị bằng cách sử dụng cùng một số khoảng trắng được sử dụng cho tiêu đề và chỉ định xem chúng tôi muốn in số nguyên (
L x                    R
L          x           R
L                    x R
9), chuỗi (
print ('{:=<20}'.format('hello'))
print ('{:_^20}'.format('hello'))
print ('{:.>20}'.format('hello'))
0) hay số dấu phẩy động (
print ('{:=<20}'.format('hello'))
print ('{:_^20}'.format('hello'))
print ('{:.>20}'.format('hello'))
1) . Lưu ý rằng vì
print ('{:=<20}'.format('hello'))
print ('{:_^20}'.format('hello'))
print ('{:.>20}'.format('hello'))
2 là một từ dài nên bạn nên căn giữa văn bản được in bên dưới từ đó. Mặt khác, căn chỉnh giống như đối với hàng tiêu đề

Hãy chắc chắn rằng bạn hiểu cách thức hoạt động của mã này. Để thực sự củng cố việc học của bạn, hãy thử thay đổi mọi thứ trong báo cáo in và xem nó có tạo ra kết quả như mong đợi không

Sự kết luận

Hy vọng rằng bạn thích những hướng dẫn này về phương thức chuỗi

L x                    R
L          x           R
L                    x R
1 và hàm
print ('{:=<20}'.format('hello'))
print ('{:_^20}'.format('hello'))
print ('{:.>20}'.format('hello'))
4. Bây giờ bạn không còn lý do gì để bào chữa cho những bản in xấu xí và thiếu thông tin

Và nếu bạn muốn các câu lệnh in Python dễ đọc hơn, hãy cân nhắc sử dụng f-strings. Như tôi đã thảo luận trong bài đăng này, chúng là cách hiện đại để in văn bản bằng Python