Hướng dẫn python read file byte offset - python đọc tệp bù byte

Tôi đang viết một chương trình sẽ phân tích tệp nhật ký Apache định kỳ để ghi lại khách truy cập, sử dụng băng thông, v.v.

Vấn đề là, tôi không muốn mở dữ liệu nhật ký và phân tích cú pháp mà tôi đã phân tích cú pháp. Ví dụ:

line1
line2
line3

Nếu tôi phân tích tệp đó, tôi sẽ lưu tất cả các dòng sau đó lưu độ bù đó. Bằng cách đó, khi tôi phân tích lại nó một lần nữa, tôi nhận được:

line1
line2
line3 - The log will open from this point
line4
line5

Vòng thứ hai, tôi sẽ nhận được line4 và line5. Hy vọng rằng điều này có ý nghĩa ...

Những gì tôi cần biết là, làm thế nào để tôi hoàn thành điều này? Python có hàm seek () để chỉ định phần bù ... vì vậy tôi chỉ lấy tệp của nhật ký (tính bằng byte) sau khi phân tích cú pháp sau đó sử dụng nó như phần bù (trong seek ()) lần thứ hai tôi đăng nhập?

Tôi dường như không thể nghĩ ra một cách để viết mã này>.

Offset after using seek function :  0
0____7
Offset after using seek function :  0
9fhand 0
line1
line2
line3 - The log will open from this point
line4
line5
3
seek(), tell()

Như chúng ta có thể thấy trong mã ở trên, phần bù nhảy sang đầu tệp khi chúng tôi đưa ra đối số của 0 0 trong chức năng SET. Và giá trị bù như được hiển thị trong đầu ra sẽ là:offset is the position of the read/write pointer within the file. offset is used later on to perform operations within the text file depending on the permissions given, like read, write, etc. 

Điều kiện tiên quyết: Seek (), Tell ()

  • Python làm cho nó cực kỳ dễ dàng để tạo/chỉnh sửa các tệp văn bản với số lượng mã tối thiểu cần thiết. Để truy cập một tệp văn bản, chúng tôi phải tạo một fileHandle sẽ tạo phần bù khi bắt đầu tệp văn bản. Nói một cách đơn giản, bù là vị trí của con trỏ đọc/ghi trong tệp. Offset được sử dụng sau này để thực hiện các hoạt động trong tệp văn bản tùy thuộc vào các quyền được đưa ra, như đọc, viết, v.v. & nbsp;: In Python, seek() function is used to change the position of the File Handle to a given specific position. The file handle is like a cursor, which defines where the data has to be read or written in the file.

Cú pháp: f.seek (offset, from_what), trong đó f là con trỏ tệpf.seek(offset, from_what), where f is file pointer

Tham số: Offset: Số lượng vị trí để di chuyển chuyển tiếp từ phía trước: nó xác định điểm tham chiếu.
Offset: Number of positions to move forward
from_what: It defines point of reference.

  • Tell (): Các chế độ truy cập chi phối loại hoạt động có thể trong tệp đã mở. Nó đề cập đến cách các tập tin sẽ được sử dụng sau khi nó mở. Các chế độ này cũng xác định vị trí của xử lý tệp trong tệp. Xử lý tệp giống như một con trỏ, xác định từ nơi dữ liệu phải được đọc hoặc ghi trong tệp. Đôi khi nó trở nên quan trọng đối với chúng tôi để biết vị trí của xử lý tệp. Phương thức Tell () có thể được sử dụng để có được vị trí của xử lý tệp. Phương thức nói () Trả về vị trí hiện tại của đối tượng tệp. Phương thức này không có tham số và trả về giá trị số nguyên. Ban đầu tệp con trỏ trỏ đến đầu tệp (nếu không được mở ở chế độ phụ lục). Vì vậy, giá trị ban đầu của Tell () bằng không. Access modes govern the type of operations possible in the opened file. It refers to how the file will be used once it’s opened. These modes also define the location of the File Handle in the file. File handle is like a cursor, which defines from where the data has to be read or written in the file. Sometimes it becomes important for us to know the position of the File Handle. tell() method can be used to get the position of File Handle. tell() method returns the current position of the file object. This method takes no parameters and returns an integer value. Initially file pointer points to the beginning of the file(if not opened in append mode). So, the initial value of tell() is zero.

Cú pháp: f.tell () & nbsp;f.tell() 

Trả về: Phương thức này trả về vị trí hiện tại của tệp đọc/ghi tệp trong tệp.This method returns the current position of the file read/write pointer within the file.

Hãy để hiểu điều này với việc thực hiện từng bước thông minh:

Bước 1: Tạo tệp văn bản.Creating a text file.

Hãy để tạo ra một tệp văn bản, email.txt, có chứa nhiều email để chứng minh hoạt động của Offset:

Python3

fhand =

line1
line2
line3 - The log will open from this point
line4
line5
4

line1
line2
line3 - The log will open from this point
line4
line5
3

line1
line2
line3 - The log will open from this point
line4
line5
6

Điều này tạo ra một tệp email email.txt, và điền vào email.

Bước 2: Hãy để kiểm tra nội dung của tệp email.txt mà chúng tôi vừa tạo bằng cách viết mã này:Let’s check the content of the emails.txt file that we just created by writing this code :

Python3

fhand =

The default position of offset is: 0
5
The default position of offset is: 0
6

line1
line2
line3 - The log will open from this point
line4
line5
6

Output:

Bước 3:

Sau khi tạo tệp email.TXT. Chúng tôi đã đọc nó bằng cách mở nó một lần nữa, lần này với các quyền đọc, điều này đặt một phần bù có tên là F FHER, đến đầu tệp, tức là ở vị trí 0. Chúng tôi có thể kiểm tra xem bằng cách sử dụng mã này:

Python3

fhand =

The default position of offset is: 0
5
First 40 Characters :  
stephen.marqu
7
First 40 Characters :  
stephen.marqu
8
line1
line2
line3 - The log will open from this point
line4
line5
3

Output:

The default position of offset is: 0

Bước 3:We write a program that asks the user to enter the number of characters they want to see from the beginning of the file.

Python3

Sau khi tạo tệp email.TXT. Chúng tôi đã đọc nó bằng cách mở nó một lần nữa, lần này với các quyền đọc, điều này đặt một phần bù có tên là F FHER, đến đầu tệp, tức là ở vị trí 0. Chúng tôi có thể kiểm tra xem bằng cách sử dụng mã này:

Bước 4: Chúng tôi viết một chương trình yêu cầu người dùng nhập số lượng ký tự họ muốn xem từ đầu tệp.

The default position of offset is: 0
5
First 40 Characters :  
stephen.marqu
7
Current position of the offset: 41
8
Current position of the offset: 41
9

Output:

First 40 Characters :  
stephen.marqu

Current position of the offset: 41
0=
Current position of the offset: 41
2 40 characters.

Current position of the offset: 41
3=
Current position of the offset: 41
5
We then check the position of the offset by using the tell() function. We use this code:

Python3

Ở đây tôi đã nhập để hiển thị 40 ký tự.

The default position of offset is: 0
5(
Offset after using seek function :  0
5
Offset after using seek function :  0
6

Output:

Current position of the offset: 41

Bước 5: Sau đó, chúng tôi kiểm tra vị trí của phần bù bằng cách sử dụng hàm Tell (). Chúng tôi sử dụng mã này:

Offset after using seek function :  0
0__
Offset after using seek function :  0
2
Now, if we want to change the current position of the offset to any position we want, we can do that using the seek() function. By, passing the position we want the offset to be at, as an argument for the seek function, we can make the offset, jump to that position. We can confirm using this code:

Python3

Bằng cách bao gồm 40 ký tự, phần bù hiện có được vị trí thứ 41. & NBSP;

The default position of offset is: 0
5(fhand 4
Offset after using seek function :  0
6

line1
line2
line3 - The log will open from this point
line4
line5
6

Output:

Offset after using seek function :  0

Bước 6: Bây giờ, nếu chúng ta muốn thay đổi vị trí hiện tại của phần bù thành bất kỳ vị trí nào chúng ta muốn, chúng ta có thể làm điều đó bằng cách sử dụng hàm Seek (). Bằng cách, vượt qua vị trí mà chúng tôi muốn phần bù được thực hiện, như một đối số cho hàm tìm kiếm, chúng ta có thể thực hiện bù, nhảy đến vị trí đó. Chúng tôi có thể xác nhận bằng cách sử dụng mã này: