Phần mở rộng của tệp nhị phân trong Python

Chủ đề này cho thấy cách bạn có thể lưu dữ liệu trong các tệp nhị phân mà không cần sử dụng các mô-đun cấu trúc hoặc cấu trúc tiêu chuẩn

nội dung

  • 1. Khái niệm tệp nhị phân. Trình bày thông tin trong tệp nhị phân
  • 2. Viết/đọc danh sách chứa số thực. Ví dụ
  • 3. Viết/đọc một bộ chứa các chuỗi ký tự. Ví dụ
  • 4. Viết/đọc tập hợp chứa số thực. Ví dụ
  • 5. Viết/đọc ma trận hai chiều của các hàng có kích thước nhất định. Ví dụ
  • 6. Viết/đọc từ điển. Ví dụ
  • 7. Sao chép một tệp nhị phân sang tệp nhị phân khác
  • 8. Kết hợp hai tệp nhị phân
  • chủ đề liên quan

Tìm kiếm các trang web khác

1. Khái niệm tệp nhị phân. Trình bày thông tin trong tệp nhị phân

Python có các công cụ để làm việc với các tệp nhị phân. Các tệp nhị phân sử dụng các chuỗi kiểu byte. Điều này có nghĩa là khi đọc dữ liệu nhị phân từ một tệp, một đối tượng kiểu byte được trả về

Tệp nhị phân được mở bằng cách sử dụng hàm open[] , có tham số chế độ chứa ký tự . Chi tiết khác về cách mở/đóng tệp nhị phân được mô tả . More details about opening/closing binary files are described tại đây .

Không giống như tệp văn bản, tệp nhị phân không chuyển đổi ký tự thành ký tự cuối chuỗi ‘\n’ .

Một ví dụ minh họa các tính năng trình bày thông tin trong tệp nhị phân

# Python. Work with binary files

# Open binary file for reading
f = open['myfile1.bin', 'rb']

# Get a string from binary file
d = f.read[]

# Display this string.
# The output will be as a string of characters
print["d = ", d] # d = b'\x80\x03]q\x00[K\x01\x88G@\x07\n=p\xa3\xd7\ne.'

# If print as a separate character,
# then the character code will be displayed - as an integer
print["d[5] = ", d[5]] # d[5] = 40
print["d[0] = ", d[0]] # d[0] = 128

# Use bin function for single character
print[bin[d[2]]] # 0b1011101
f.close[]

Kết quả của chương trình

d = b'\x80\x03]q\x00[K\x01\x88G@\x07\n=p\xa3\xd7\ne.'
d[5] = 40
d[0] = 128
0b1011101

Dựa vào ví dụ trên, có thể rút ra kết luận sau

  • một chuỗi dữ liệu nhị phân được xuất dưới dạng một chuỗi;
  • một ký tự đơn [phần tử] của dữ liệu nhị phân được biểu diễn dưới dạng số nguyên 8 bit

 

2. Viết/đọc danh sách chứa số thực. Ví dụ

 

# Binary files Writing / reading a list of real numbers

# 1. Given list of real numbers
L = [1.5, 2.8, 3.3]

# 2. File writing
# 2.1. Open file for writing
f = open['myfile3.bin', 'wb']

# 2.2. Bypass list and write data to a file
for item in L:
    # add the character '\ n' so that numbers can be recognized
    s = str[item] + '\n'

    # Encode [] method - converts a string to a sequence of bytes
    bt = s.encode[]
    f.write[bt] # write[] method - write to file

# 2.3. Close file
f.close[];

# 3. Read list from binary file 'myfile3.bin'
# 3.1. Create an empty list
L2 = []

# 3.2. Open file for reading
f = open['myfile3.bin', 'rb']

# 3.3. Bypass lines of a file, converting and adding to the list L2
for ln in f:
    x = float[ln] # get a number
    L2 = L2 + [x] # Add number to list

    # 3.4. Output the list
    print["L2 = ", L2] # L2 = [1.5, 2.8, 3.3]

# 3.5. Close file
f.close[];

Kết quả của chương trình

L2 = [1.5, 2.8, 3.3]

 

3. Viết/đọc một bộ chứa các chuỗi ký tự. Ví dụ

Trong ví dụ này, các chuỗi ký tự trong tệp nhị phân được phân tách bằng ký tự ‘\n’ . Do đó, có thể viết và đọc thông tin mà không làm mất cấu trúc của nó.

# Binary files. Writing / reading a tuple containing character strings

# 1. The specified tuple with strings
T = [ 'abc', 'def', 'ghi', 'jk lmn']

# 2. Write tuple T to file 'myfile5.bin'
# 2.1. Open file for writing
f = open['myfile5.bin', 'wb']

# 2.2. Tuple bypass cycle
for item in T:
    bt = [item + '\n'].encode[] # convert [str + '\n'] => bytes
    f.write[bt] # write bt to file

# 2.3. Close file
f.close[];

# 3. Read tuple from binary file 'myfile5.bin'
# 3.1. Open file for reading
f = open['myfile5.bin', 'rb']

# 3.2. A new tuple
T2 = []

# 3.3. Read data from file
for line in f:
    s = line.decode[] # convert bytes=>str
    s = s[:-1] # Remove the last character
    T2 = T2 + [s,] # Add string s to tuple

# 3.4. Print the tuple
print["T2 = ", T2]

# 3.5. Close file
f.close[];

Kết quả của chương trình

T2 = ['abc', 'def', 'ghi', 'jk lmn']

 

4. Viết/đọc tập hợp chứa số thực. Ví dụ

Một tập hợp chỉ chứa các đối tượng cùng loại có thể được ghi vào một tệp. Trong ví dụ này, nhiều số thực được viết

# Binary files. Writing/reading a set that contains real numbers

# 1. Given set
M = { 0.2, 0.3, 0.8, 1.2, 1.77 }

# 2. Writing the set M to the file 'myfile6.bin'
# 2.1. Open file for writing
f = open['myfile6.bin', 'wb']

# 2.2. The loop of bypass the set
for item in M:
    s = str[item] + '\n' # convert float=>str + '\n'
    bt = s.encode[] # convert str=>bytes
    f.write[bt] # write bt to file

# 2.3. Close file
f.close[];

# 3. Read set from binary file 'myfile6.bin'
# 3.1. Open file for reading
f = open['myfile6.bin', 'rb']

# 3.2. Create a new set
M2 = set[]

# 3.3. Read data from file
for line in f:
    x = float[line] # convert bytes=>x
    M2 = M2.union[{x}] # add x to the set

# 3.4. Print the set
print["M2 = ", M2]

# 3.5. Close file
f.close[]

Kết quả của chương trình

M2 = {0.2, 0.8, 0.3, 1.77, 1.2}

Nội dung của myfile6. tập tin bin

________số 8

 

5. Viết/đọc ma trận hai chiều của các hàng có kích thước nhất định. Ví dụ

Trong ví dụ, ma trận được trình bày dưới dạng danh sách

# Binary files. Writing/reading a matrix that contains rows

# 1. Given matrix of rows 3*4 in size

MATRIX = [ [ 'aa', 'ab', 'ac', 'ad'],
           [ 'ba', 'bb', 'bc', 'bd'],
           [ 'ca', 'cb', 'cc', 'cd'] ]

# 2. Writing MATRIX matrix to the file 'myfile7.bin'
# 2.1. Open file for writing
f = open['myfile7.bin', 'wb']

# 2.2. First, write the size of the matrix
m = 3
n = 4

# convert m, n to str type
sm = str[m] + '\n'
sn = str[n] + '\n'

# convert str to bytes
bm = sm.encode[]
bn = sn.encode[]

# write matrix sizes to file
f.write[bm]
f.write[bn]

# 2.3. The loop of matrix traversal
for row in MATRIX:
    # here you just need to write lines with the character '\n'
    for item in row:
        item = item + '\n'
        bt = item.encode[] # str=>bytes
        f.write[bt] # write bt to file

# 2.3. Close file
f.close[];

# 3. Read matrix from binary file 'myfile7.bin'
# 3.1. Open file for reading
f = open['myfile7.bin', 'rb']

# 3.2. A new matrix
MATRIX2 = []

# 3.3. Read data from file
# 3.3.1. First, read size
s = f.readline[]
m2 = int[s]
s = f.readline[]
n2 = int[s]

# 3.3.2. Loop of reading the lines and the creation of a matrix size m2*n2
i = 0
while i < m2: # m2 rows in matrix
    row = [] # one row in list
    j = 0
    while j < n2:
        bs = f.readline[] # read one element of type bytes
        s = bs.decode[] # convert bytes=>str
        s = s[:-1] # remove '\n'
        row += [s] # add to the list
        j = j+1
    MATRIX2 += [row] # add one row of the list to the matrix
    i = i+1

# 3.4. Display new matrix
i = 0
while i < m2:
    print["MATRIX2[", i, "] = ", MATRIX2[i]]
    i = i+1

# 3.5. Close file
f.close[]

Kết quả của chương trình

d = b'\x80\x03]q\x00[K\x01\x88G@\x07\n=p\xa3\xd7\ne.'
d[5] = 40
d[0] = 128
0b1011101
0

Nội dung của tệp myfile7. txt

d = b'\x80\x03]q\x00[K\x01\x88G@\x07\n=p\xa3\xd7\ne.'
d[5] = 40
d[0] = 128
0b1011101
1

 

6. Viết/đọc từ điển. Ví dụ

Hãy để một số từ điển được cung cấp cần được ghi vào tệp nhị phân

d = b'\x80\x03]q\x00[K\x01\x88G@\x07\n=p\xa3\xd7\ne.'
d[5] = 40
d[0] = 128
0b1011101
2

Kết quả của chương trình

d = b'\x80\x03]q\x00[K\x01\x88G@\x07\n=p\xa3\xd7\ne.'
d[5] = 40
d[0] = 128
0b1011101
3

Nội dung của myfile8. txt tệp

d = b'\x80\x03]q\x00[K\x01\x88G@\x07\n=p\xa3\xd7\ne.'
d[5] = 40
d[0] = 128
0b1011101
4

 

7. Sao chép một tệp nhị phân sang tệp nhị phân khác

 

d = b'\x80\x03]q\x00[K\x01\x88G@\x07\n=p\xa3\xd7\ne.'
d[5] = 40
d[0] = 128
0b1011101
5

 

8. Kết hợp hai tệp nhị phân. Ví dụ

Ví dụ thực hiện thao tác kết hợp hai tệp thành tệp thứ ba kết quả. Đầu tiên, dữ liệu từ tệp nguồn được đọc vào danh sách. Sau đó, các danh sách này được nối với nhau và danh sách kết quả được ghi vào tệp kết quả

Phần mở rộng của tệp nhị phân là gì?

Nói chung, chương trình thực thi -- hoặc sẵn sàng chạy -- được xác định là tệp nhị phân và có phần mở rộng tên tệp, chẳng hạn như . thùng rác hoặc. exe .

Là. PY một tệp nhị phân?

Tệp "nhị phân" là bất kỳ tệp nào có định dạng không bao gồm các ký tự có thể đọc được . Tệp nhị phân có thể bao gồm từ tệp hình ảnh như JPEG hoặc GIF, tệp âm thanh như MP3 hoặc định dạng tài liệu nhị phân như Word hoặc PDF. Trong Python, các tệp được mở ở chế độ văn bản theo mặc định.

Là. dat tập tin nhị phân?

dat và nhóm khác nói rằng đó là định dạng văn bản nhị phân . Chúng có kích thước tệp lớn, một số lớn tới 200mb. Tôi đã tìm thấy một vài ví dụ về cách đọc các tệp thành một mảng byte, nhưng cho đến nay tất cả các ví dụ dường như là 1 hoặc 2 dòng chuỗi nhỏ mà chúng chuyển đổi thành và chuyển đổi ngược lại.

Làm cách nào để đọc tệp nhị phân bằng Python?

Để đọc từ tệp nhị phân, chúng ta cần mở tệp đó bằng chế độ rb thay vì chế độ mặc định là rt . >>> với open["bài tập. zip", mode="rb"] dưới dạng zip_file. . nội dung = zip_file. đọc[].

Chủ Đề