Python viết dòng cuối cùng của tập tin

Vòng lặp

This is the last file
4 được sử dụng để lặp qua từng phần tử của một lần lặp trong Python. Chúng ta có thể sử dụng vòng lặp
This is the last file
4 để lặp qua từng dòng bên trong một tệp một cách tuần tự và sau đó đọc dòng cuối cùng của tệp. Đoạn mã sau chỉ cho chúng ta cách đọc dòng cuối cùng của tệp bằng vòng lặp
This is the last file
4

with open('file.txt', 'r') as f:
    for line in f:
        pass
    last_line = line
print(last_line)

đầu ra

This is the last file

Chúng tôi đã mở tệp

This is the last file
7 ở chế độ
This is the last file
8 và sử dụng vòng lặp
This is the last file
4 để lặp qua từng dòng trong tệp. Chúng tôi đã sử dụng từ khóa
This is the last file
1 để giữ cho vòng lặp trống. Từ khóa
This is the last file
1 này hoạt động như một dòng trống trong Python và được sử dụng khi chúng ta không muốn viết bất kỳ mã nào bên trong vòng lặp hoặc câu lệnh điều kiện. Chúng tôi lưu trữ dòng cuối cùng bên trong biến
This is the last file
3 khi vòng lặp kết thúc và in giá trị của nó

Đọc dòng cuối cùng của tệp với hàm
This is the last file
4 trong Python

Hàm

This is the last file
5 đọc tất cả các dòng của tệp và trả về chúng dưới dạng danh sách. Sau đó, chúng tôi có thể lấy dòng cuối cùng của tệp bằng cách tham chiếu chỉ mục cuối cùng của danh sách bằng cách sử dụng
This is the last file
6 làm chỉ mục. Ví dụ mã sau đây cho chúng ta biết cách đọc dòng cuối cùng của tệp bằng hàm
This is the last file
5 của Python

with open('file.txt', 'r') as f:
    last_line = f.readlines()[-1]
print(last_line)

đầu ra

This is the last file

Chúng tôi đã mở tệp

This is the last file
7 ở chế độ
This is the last file
8 và sử dụng
with open('file.txt', 'r') as f:
    last_line = f.readlines()[-1]
print(last_line)
0 để đọc dòng cuối cùng của tệp. Chúng tôi đã sử dụng
with open('file.txt', 'r') as f:
    last_line = f.readlines()[-1]
print(last_line)
1 vì hàm
This is the last file
4 trả về tất cả các dòng ở dạng danh sách và chỉ mục
with open('file.txt', 'r') as f:
    last_line = f.readlines()[-1]
print(last_line)
1 này cung cấp cho chúng tôi phần tử cuối cùng của danh sách đó

Trong Python, không có phương thức nào có thể đọc trực tiếp dòng cuối cùng của tệp. Vì vậy, chúng ta phải đọc toàn bộ tệp một cách tuần tự cho đến khi đến dòng cuối cùng. Phương thức đầu tiên đọc từng dòng tệp, trong khi phương thức thứ hai đọc tất cả các dòng cùng một lúc

This is the last file
512
This is the last file
21
This is the last file
584
This is the last file
585
This is the last file
38
This is the last file
42
This is the last file
588
This is the last file
589
This is the last file
38
This is the last file
38
This is the last file
77
This is the last file
50

Nếu bạn có một tệp lớn mà bạn không muốn lưu trữ trong bộ nhớ hoặc lặp lại theo cách bạn đã thấy trước đây, bạn có thể dựa vào việc tìm kiếm tệp

Để tìm dòng cuối cùng của một tệp lớn trong Python bằng cách tìm kiếm

  1. Mở tệp ở chế độ nhị phân
  2. Tìm kiếm đến cuối tập tin
  3. Quay lại các ký tự để tìm đầu dòng cuối cùng

Đây là giao diện của nó trong mã

This is the last file
1

Tuy nhiên, bằng cách xem mã, việc hiểu cách thức hoạt động của nó không phải là chuyện nhỏ

Tìm kiếm tệp hoạt động như thế nào trong Python

Để đọc dòng cuối cùng của tệp bằng cách tìm kiếm trong Python, trình đọc tệp được di chuyển đến ký tự cuối cùng của tệp. Sau đó, đầu đọc nhảy ngược từng ký tự cho đến khi đến đầu dòng cuối cùng. Sau đó, nó đọc dòng cuối cùng vào bộ nhớ

Dưới đây là minh họa về cách mã tìm thấy dòng cuối cùng trong một tệp có ba dòng văn bản

Hãy xem mã chi tiết hơn một chút

Trước hết, tìm kiếm có nghĩa là đặt vị trí của trình đọc tệp trong tệp

Trong Python, bạn chỉ có thể tìm kiếm tệp nhị phân, vì vậy bạn cần đọc tệp dưới dạng tệp nhị phân

Phương thức seek() tuân theo cú pháp này

This is the last file
2

Ở đâu

Độ lệch chỉ định số lượng ký tự cần di chuyển. Sử dụng giá trị âm để di chuyển lùi

Đối số wherece là đối số tùy chọn có thể được đặt

  • hệ điều hành. SEEK_SET hoặc 0—tìm kiếm liên quan đến phần đầu của tệp
  • hệ điều hành. SEEK_CUR hoặc 1—tìm kiếm liên quan đến vị trí hiện tại trong tệp
  • hệ điều hành. SEEK_END hoặc 2—tìm kiếm liên quan đến phần cuối của tệp

Trước hết, hãy đơn giản hóa đoạn mã trên một chút bằng cách loại bỏ phần xử lý lỗi và các hằng số mô-đun os

This is the last file
3

Bây giờ bạn đã hiểu phương thức seek() hoạt động như thế nào, bạn có thể hiểu mã

  • tập tin. seek(-2, 2) có nghĩa là “Chuyển đến ký tự thứ 2 trước khi kết thúc tệp”
  • tập tin. read(1) có nghĩa là “Đọc ký tự từ bên phải”
  • tập tin. seek(-2, 1) có nghĩa là “Nhảy 2 ký tự còn lại từ ký tự hiện tại”
  • b’\n’ là ký tự ngắt dòng ở chế độ nhị phân
  • tập tin. dòng đọc (). decode() đọc dòng và chuyển đổi nó từ nhị phân thành chuỗi

Vì vậy, quá trình là như sau

  • Trước tiên, mã nhảy đến ký tự cuối cùng của tệp
  • Sau đó, nó sẽ kiểm tra xem ký tự có phải là ký tự ngắt dòng không
  • Nếu không, nó sẽ quay lại một ký tự và kiểm tra lại
  • Nó lặp lại điều này cho đến khi gặp phải ngắt dòng, điều này cho thấy rằng đã đến đầu dòng cuối cùng
  • Sau đó, nó lưu dòng cuối cùng trong bộ nhớ

Lưu ý rằng việc tìm kiếm tệp chỉ hoạt động với tệp nhị phân. Đây là lý do tại sao tệp được đọc ở chế độ nhị phân. Ngoài ra, lưu ý rằng khi bạn đang xử lý tệp nhị phân, bạn cần nhảy hai ký tự sang trái để đọc một ký tự ở bên phải

Bây giờ, hãy quay lại xử lý lỗi bắt thử để đảm bảo tệp không dài chính xác một dòng. Bởi vì nếu có, hàm seek() sẽ không bao giờ gặp ký tự ngắt dòng vì không có ký tự nào. Hãy cũng sử dụng các hằng số của mô-đun os SEEK_END và SEEK_CUR thay vì 1 hoặc 2 đơn giản