Xử lý tệp là một khái niệm quan trọng của lập trình. Nó cho phép chúng ta lưu thông tin vào bộ nhớ vĩnh viễn. Xử lý tệp trong python cung cấp các tính năng tuyệt vời cùng với việc lập trình dễ dàng
Hàm seek[] trong python là một trong những tính năng tuyệt vời này. seek[] trong python cho phép chúng ta thao tác xử lý tệp sao cho các phần khác nhau của tệp có thể được truy cập ngẫu nhiên
Hàm seek[] trong python được bổ sung bởi hàm tell[] cung cấp vị trí hiện tại của tệp xử lý
Cú pháp tìm kiếm [] trong Python
Hàm seek[] là một phương thức lớp có sẵn bên trong đối tượng con trỏ tệp. Để gọi seek[] trong python, đầu tiên chúng ta cần khai báo một con trỏ tệp bằng cách mở một tệp
Cú pháp của "seek[]" trong python là
file_pointer.seek[offset[, from_where]]
Tham số của seek[] trong Python
Như đã thấy trong cú pháp trên, hàm seek[] trong python có hai tham số
- bù lại. bắt buộc, số lượng ký tự để di chuyển xử lý tệp
- từ đâu. tùy chọn, điểm tham chiếu mà từ đó phần xử lý tệp được di chuyển tương đối
Tham số offset cho biết số lượng ký tự để di chuyển xử lý tệp. Đó là một số nguyên làm cho con trỏ tệp di chuyển theo số ký tự đã cho [hoặc byte, nếu tệp được mở ở chế độ nhị phân]
Ví dụ sử dụng offset
Tham số from_where là điểm tham chiếu từ đó con trỏ tệp sẽ được di chuyển
Đối số này là tùy chọn và nhận một trong ba giá trị
- os. SEEK_SET [hoặc 0].
mặc định, offset cung cấp vị trí tuyệt đối của con trỏ tệp. - os. SEEK_CUR [hoặc 1].
offset cung cấp vị trí mới tương ứng với vị trí hiện tại của con trỏ tệp. - os. SEEK_END [hoặc 2].
offset đưa ra vị trí tương ứng với vị trí kết thúc của tệp.
Ví dụ sử dụng from_where
file_handle.seek[-2, os.SEEK_CUR]
Ghi chú.
Rằng tham chiếu tương đối [os. SEEK_CUR và hệ điều hành. SEEK_END] yêu cầu mở tệp ở chế độ nhị phân.
Giá trị trả về của seek[] trong Python
Hàm seek[] trong python trả về một giá trị số nguyên biểu thị vị trí mới của con trỏ tệp
Loại trả lại. số nguyên
Thí dụ. Chương trình sau Hiển thị giá trị trả về được cung cấp bởi seek[]
Nội dung của mẫu. tập tin txt là
This is just a sample file
file_pointer = open["sample.txt"] current_position = file_pointer.tell[] new_position = file_pointer.seek[30] print[current_position] print[new_position] new_position = file_pointer.seek[12] print[new_position]
đầu ra
Ngoại lệ của seek[] trong Python
Phương thức tìm kiếm có thể gây ra ngoại lệ io. Hoạt động không được hỗ trợ. Ngoại lệ này xảy ra khi chúng tôi cố gắng tìm kiếm liên quan đến hiện tại hoặc kết thúc khi tệp được mở ở chế độ không nhị phân
Chế độ nhị phân.
Ở chế độ này, tệp được đọc từng chút một, chế độ này được sử dụng để đọc các tệp nhị phân đặc biệt mà con người không thể hiểu được.
Chế độ phi nhị phân.
Nó còn được gọi là chế độ ký tự, trong đó tệp được đọc từng ký tự một. Những tập tin này là con người có thể đọc được.
Thí dụ. Chứng minh ngoại lệ của seek[] trong Python
>> import os >> file_handle = open['sample.txt'] # non-binary mode >> file_handle.seek[765] # 765 >> file_handle.seek[7, os.SEEK_CUR] # Traceback [most recent call last]: # File "", line 1, in # io.UnsupportedOperation: can't do nonzero cur-relative seeks >> file_handle.seek[8, os.SEEK_END] # Traceback [most recent call last]: # File "", line 1, in # io.UnsupportedOperation: can't do nonzero end-relative seeks
Ghi chú
- Tìm kiếm [765] sẽ không đưa ra ngoại lệ ngay cả khi độ dài tệp nhỏ hơn 765
- Tất cả các thao tác đọc-ghi tiếp theo sẽ được thực hiện từ chính vị trí con trỏ tệp mới này
- Ví dụ: readline[] sau seek[765] sẽ trả về một chuỗi rỗng ['']
Ví dụ về seek[] trong Python
Thí dụ. Đoạn mã sau minh họa cách sử dụng cơ bản của hàm seek[] trong Python
Nội dung của "mẫu. txt" là
file_handle = open['sample.txt'] print[file_handle.tell[]] print[file_handle.seek[10]] print[file_handle.readline[]]
đầu ra
Tìm kiếm [] trong Python là gì?
Cho đến bây giờ, chúng ta đã thấy nhiều bit khác nhau tạo nên hàm seek[]. Bây giờ, chúng ta hãy xem xét toàn bộ seek[]
Hàm seek[] trong python cho phép chúng tôi truy cập các phần khác nhau của tệp đã mở theo yêu cầu của chúng tôi. Điều này cho phép chúng tôi thực hiện các thao tác đọc-ghi một cách ngẫu nhiên
seek[] lấy một đối số bắt buộc offset và một đối số tùy chọn from_where, đồng thời trả về vị trí mới của con trỏ tệp. Nó rất hữu ích cho các hoạt động xử lý tệp vì nó cho phép chúng tôi chuyển đến một phần cụ thể của tệp
Cần mở một trình điều khiển tệp để chức năng tìm kiếm [] có thể hoạt động. Nếu phần xử lý tệp được mở ở chế độ ghi thêm ['aw'] thì mọi thao tác được thực hiện bằng seek[] đều vô dụng
Trong bức tranh lớn, chức năng tìm kiếm thao tác với con trỏ tệp. Con trỏ này sau đó ảnh hưởng đến vị trí đọc và ghi của thao tác tệp cụ thể đó
Thêm ví dụ
Đối với phần còn lại của các ví dụ, chúng tôi sẽ sử dụng "mẫu. txt" với nội dung
This is a sample file the second line in the sample file
Ví dụ 1. Tìm kiếm chuyển tiếp qua dòng và sau đó đọc phần còn lại của tệp
file_pointer = open['sample.txt'] print[file_pointer.seek[5]] print[file_pointer.read[]]
đầu ra
________số 8Giải thích.
Khi chúng tôi mở tệp, chúng tôi đã không cung cấp bất kỳ đối số nào khác sau tên tệp. Do đó, tệp được mở ở chế độ không nhị phân [hoặc ký tự]. Trong dòng mã thứ hai, chúng tôi tìm kiếm 5 ký tự phía trước của tệp và đọc phần còn lại của tệp. 5 ký tự đầu tiên của tệp "This " không được nhìn thấy trong đầu ra.Ví dụ - 2. Việc sử dụng các giá trị bù trừ âm
import os file_pointer = open['sample.txt', 'rb'] # binary mode print[file_pointer.tell[]] print[file_pointer.seek[-20, os.SEEK_END]] print[file_pointer.read[]]
đầu ra
0file_handle.seek[-2, os.SEEK_CUR]
Ghi chú.
Hàm read[] trả về một mảng byte [b''] thay vì một chuỗi vì chúng ta đã mở tệp ở chế độ nhị phân ['rb']
Giải thích.
Để sử dụng giá trị offset âm, chúng ta cần mở tệp ở chế độ nhị phân. sử dụng hệ điều hành. SEEK_END làm điểm tham chiếu cho phần bù vì điểm tham chiếu mặc định là phần đầu của tệp và các giá trị âm từ phần đầu của tệp không được phép. Chúng ta cũng có thể thấy rằng kiểu trả về từ hàm read[] là một mảng byte khi tệp được mở ở chế độ nhị phân.
Ví dụ - 3. Đọc chiều rộng của tệp Png
1file_handle.seek[-2, os.SEEK_CUR]
đầu ra
Giải thích.
Trong phần này, chúng tôi sử dụng seek[] để đọc chiều cao và chiều rộng của một. tập tin hình ảnh png. Thư viện urllib được sử dụng để tải xuống google. tập tin png. Điều kỳ diệu thực sự xảy ra khi chúng ta gọi seek[16]. Bất cứ gì. png, nó được định nghĩa trong cấu trúc rằng chiều rộng của hình ảnh là một số nguyên 4 byte nằm ở phần bù byte thứ 16 của. tập tin png. Ngoài ra, chiều cao của hình ảnh được cung cấp dưới dạng số nguyên 4 byte trên phần bù byte thứ 20 của. tập tin png. Chúng tôi đã sử dụng thư viện struct để chuyển đổi giá trị nhị phân của số nguyên 4 byte thành giá trị nguyên của biến python.
Sự kết luận
Trong bài viết này, chúng ta đã hiểu hoạt động của seek[] trong python. Cùng với các khái niệm sau