Csv đọc dòng cuối Python

Trong bài viết này, chúng ta sẽ thảo luận về một giải pháp tiết kiệm bộ nhớ để đọc dòng cuối cùng hoặc N dòng cuối cùng từ tệp văn bản hoặc tệp CSV trong python. Sau đó, chúng ta cũng sẽ xem cách chỉ thực dòng cuối cùng hoặc kiểm tra xem dòng cuối cùng trong tệp có khớp với dòng đã cho hay không

Chúng tôi đã tạo một chức năng để đọc N dòng cuối cùng từ tệp văn bản,

import os


def get_last_n_lines[file_name, N]:
    # Create an empty list to keep the track of last N lines
    list_of_lines = []
    # Open file for reading in binary mode
    with open[file_name, 'rb'] as read_obj:
        # Move the cursor to the end of the file
        read_obj.seek[0, os.SEEK_END]
        # Create a buffer to keep the last read line
        buffer = bytearray[]
        # Get the current position of pointer i.e eof
        pointer_location = read_obj.tell[]
        # Loop till pointer reaches the top of the file
        while pointer_location >= 0:
            # Move the file pointer to the location pointed by pointer_location
            read_obj.seek[pointer_location]
            # Shift pointer location by -1
            pointer_location = pointer_location -1
            # read that byte / character
            new_byte = read_obj.read[1]
            # If the read byte is new line character then it means one line is read
            if new_byte == b'\n':
                # Save the line in list of lines
                list_of_lines.append[buffer.decode[][::-1]]
                # If the size of list reaches N, then return the reversed list
                if len[list_of_lines] == N:
                    return list[reversed[list_of_lines]]
                # Reinitialize the byte array to save next line
                buffer = bytearray[]
            else:
                # If last read character is not eol then add it in buffer
                buffer.extend[new_byte]

        # As file is read completely, if there is still data in buffer, then its first line.
        if len[buffer] > 0:
            list_of_lines.append[buffer.decode[][::-1]]

    # return the reversed list
    return list[reversed[list_of_lines]]

Hàm này chấp nhận 2 đối số i. e. đường dẫn tệp dưới dạng chuỗi và số nguyên N [số dòng được đọc từ cuối cùng]. Nó trả về một danh sách N dòng cuối cùng của tệp

Chức năng này hoạt động như thế nào?

Trước hết, nó tạo một danh sách trống để lưu trữ N dòng cuối cùng của tệp. Sau đó, nó mở tệp đã cho để đọc ở định dạng nhị phân và bắt đầu đọc từng byte từ cuối tệp cho đến khi bắt đầu tệp i. e. theo hướng ngược lại. Trong khi đọc byte, ngay khi nó gặp một ký tự dòng mới '\n', điều đó có nghĩa là một dòng đã được đọc thành công. Sau đó, nó đảo ngược chuỗi và thêm chuỗi/dòng đó vào danh sách và tiếp tục đọc các byte tiếp theo từ tệp theo hướng ngược lại cho đến khi đạt đến đầu tệp hoặc kích thước danh sách của chúng tôi trở thành N

Nó bên trong sử dụng hai chức năng tôi. e

  • file_object. nói[]. Nó cung cấp vị trí hiện tại của con trỏ trong tệp, tôi. e. số byte từ đầu tệp
  • file_object. tìm kiếm [bù, điểm tham chiếu]. Nó di chuyển con trỏ đến điểm tham chiếu + offset

 Hãy sử dụng hàm đã tạo ở trên để tìm nạp N dòng cuối cùng từ một tệp văn bản,

Giả sử chúng ta có một tệp văn bản 'mẫu. txt' và nội dung của nó là,

Hello this is a sample file
It contains sample text
Dummy Line A
Dummy Line B
Dummy Line C
This is the end of file

Bây giờ, chúng tôi sẽ tìm nạp N dòng cuối cùng từ tệp này,

Nhận 3 dòng cuối cùng của tệp văn bản dưới dạng danh sách trong python

# Get last three lines from file 'sample.txt'
last_lines = get_last_n_lines["sample.txt", 3]

print['Last 3 lines of File:']
# Iterate over the list of last 3 lines and print one by one
for line in last_lines:
    print[line]

Đầu ra.
______3
Nó trả về 3 dòng cuối cùng từ tệp 'sample. txt’ dưới dạng danh sách các chuỗi và sau đó chúng tôi lặp lại danh sách để in 3 dòng cuối cùng của tệp.

Hãy xem một ví dụ khác,

Nhận 5 dòng cuối cùng của tệp văn bản hoặc tệp CSV

# get last five lines from the file
last_lines = get_last_n_lines["sample.txt", 5]

print['Last 5 lines of File:']
# Iterate over the list of last 5 lines and print one by one
for line in last_lines:
    print[line]

Đầu ra.
______5
Hiệu quả của giải pháp.

Đây là một giải pháp hiệu quả vì chúng tôi chỉ đọc các dòng từ cuối cùng và tối đa chỉ có N dòng trong bộ nhớ tại một thời điểm

Vì vậy, ngay cả khi chúng tôi có tệp lớn với kích thước tính bằng GB và chúng tôi muốn đọc 10 dòng cuối cùng, thì giải pháp này sẽ cho kết quả hiệu quả vì chúng tôi đã bắt đầu từ cuối cùng và chỉ đọc cho đến 10 dòng cuối cùng, không quan trọng kích thước của tệp lớn như thế nào.

Đọc dòng cuối cùng của tệp văn bản hoặc tệp CSV hoặc tệp nhật ký

chúng ta có thể sử dụng chức năng tương tự, để đọc dòng cuối cùng của tệp. Chúng ta cần chuyển 1 làm đối số N trong hàm get_last_n_lines[] và nó sẽ trả về một danh sách chứa dòng cuối cùng. Ví dụ:

# get last line of the file
last_lines = get_last_n_lines["sample.txt", 1]

print['Last Line of File:']
print[last_lines[0]]

Đầu ra.
______7
Đây là cách chúng tôi đọc và in dòng cuối cùng từ một tệp. Đây cũng là một giải pháp hiệu quả ngay cả trong trường hợp tệp lớn vì chúng tôi bắt đầu đọc từ cuối và theo hướng ngược lại.

Chủ Đề