Đọc tệp thành byte python

Chào. tôi có một câu hỏi thực sự cơ bản (rất mới đối với python). làm cách nào để đọc toàn bộ tệp nhị phân? . //www. nhà phát triển. com/content/working-binary-data-python ,

while True:
      data = binary_file.read()
      if not data:
           break
      #return hex rep and write
3 là đọc toàn bộ tệp cùng một lúc. vì vậy tôi có một. dng để kiểm tra, đó là 16. 2mb, và tôi đã làm

with open("portrait1.dng", "rb") as binary_file:
        #Read the whole file at once
        data = binary_file.read()
        #Return the hexadecimal representation of the binary data, byte instance
        hexa = binascii.hexlify(data)
        with open("readprotrait1.raw", "wb") as write_file:
              write_file.write(hexa)

tôi đang sử dụng trình soạn thảo hex để xem liệu dữ liệu từ. dng được sao chép vào. tệp thô nhưng chỉ một phần của nó được sao chép. kết quả tương tự xảy ra khi tôi sử dụng vòng lặp

while True:
      data = binary_file.read()
      if not data:
           break
      #return hex rep and write
4 như

while True:
      data = binary_file.read()
      if not data:
           break
      #return hex rep and write

nếu tôi đặt kích thước (1024) trong

while True:
      data = binary_file.read()
      if not data:
           break
      #return hex rep and write
5, chỉ một vài dòng cuối cùng của dữ liệu được ghi. vậy nó có thực sự đọc toàn bộ tệp không và tại phần "ghi" là nơi nó trở nên phức tạp (không ghi hoàn chỉnh)?

con trăn

0 0

Chia sẻ

  • 2 Người đóng góp
  • 2 Trả lời
  • 53K Lượt xem
  • 3 giờ Khoảng thời gian thảo luận
  • Bài đăng mới nhất 4 năm trước Bài đăng mới nhất của Gribouillis

Câu trả lời được đề xuất

Đã trả lời bởi Gribouillis 1.391 trong một bài đăng từ 4 năm trước

Đọc tệp theo khối và cũng viết khối

with open("portrait1.dng", "rb") as binaryfile :
    with open("readfile.raw", "wb") as newFile:
        while True:
            chunk = binaryfile.read(4096)
            if not chunk:
                break
            newFile.write(binascii.hexlify(chunk))

toàn bộ cuộc sống đại học của tôi là về điều này (bản dịch, nếu nó chết tôi chết)

Bảo đảm …

Chuyển tới bài viết

Tất cả 2 câu trả lời

Đọc tệp thành byte python

nadiam 0 Đăng bài chuyên nghiệp trong đào tạo

4 năm trước

Được chứ. Tôi vừa tìm thấy

while True:
      data = binary_file.read()
      if not data:
           break
      #return hex rep and write
0 đã hoàn thành mục tiêu của mình bằng cách

with open("portrait1.dng", "rb") as binaryfile :
    myArr = bytearray(binaryfile.read())

with open("readfile.raw", "wb") as newFile:
    newFile.write(myArr)

nhưng các câu hỏi của tôi vẫn còn nhiều vấn đề vì như tôi đã đề cập, tệp hiện tại tôi đang kiểm tra chỉ là 16. 2mb và tệp thực sẽ được sử dụng là 8gb và tôi đã kiểm tra mã này với tệp khổng lồ đó và máy tính xách tay của tôi bị treo. vì vậy một vài câu hỏi/suy nghĩ được cập nhật

  1. đọc và ghi rõ ràng là hoạt động nhưng thao tác nào sử dụng nhiều RAM nhất? . có cách nào để giảm tải đó không? . toàn bộ cuộc sống đại học của tôi là về điều này (bản dịch, nếu nó chết tôi chết)

    Tuy nhiên, tốt hơn là liên kết đối tượng tệp với một biến để bạn có thể gọi

    while True:
          data = binary_file.read()
          if not data:
               break
          #return hex rep and write
    6 trên đó ngay khi hoàn tất. Ví dụ, đối với một tệp văn bản

    file_object = open('thefile.txt')
    all_the_text = file_object.read(  )
    file_object.close(  )

    Có bốn cách để đọc nội dung của tệp văn bản cùng một lúc dưới dạng danh sách các chuỗi, mỗi chuỗi một dòng

    list_of_all_the_lines = file_object.readlines(  )
    list_of_all_the_lines = file_object.read(  ).splitlines(1)
    list_of_all_the_lines = file_object.read().splitlines(  )
    list_of_all_the_lines = file_object.read(  ).split('\n')

    Hai cách đầu tiên để lại một

    while True:
          data = binary_file.read()
          if not data:
               break
          #return hex rep and write
    7 ở cuối mỗi dòng (i. e. , trong mỗi mục chuỗi trong danh sách kết quả), trong khi hai cách còn lại loại bỏ tất cả các ký tự
    while True:
          data = binary_file.read()
          if not data:
               break
          #return hex rep and write
    7 ở cuối. Cách đầu tiên trong bốn cách này là cách nhanh nhất và Pythonic nhất. Trong Python 2. 2 trở về sau có cách thứ 5 tương đương với cách thứ nhất

    list_of_all_the_lines = list(file_object)

Trừ khi tệp bạn đang đọc thực sự lớn, còn không thì việc đưa tất cả vào bộ nhớ trong một lần nhấp là cách nhanh nhất và nói chung là thuận tiện nhất cho bất kỳ quá trình xử lý tiếp theo nào. Hàm tích hợp sẵn

file_object = open('thefile.txt')
all_the_text = file_object.read(  )
file_object.close(  )
0 tạo đối tượng tệp Python. Với đối tượng đó, bạn gọi phương thức
file_object = open('thefile.txt')
all_the_text = file_object.read(  )
file_object.close(  )
1 để lấy tất cả nội dung (dù là văn bản hay nhị phân) dưới dạng một chuỗi lớn duy nhất. Nếu nội dung là văn bản, bạn có thể chọn tách ngay chuỗi đó thành một danh sách các dòng, bằng phương thức
file_object = open('thefile.txt')
all_the_text = file_object.read(  )
file_object.close(  )
2 hoặc bằng phương thức chuyên biệt
file_object = open('thefile.txt')
all_the_text = file_object.read(  )
file_object.close(  )
3. Vì việc chia tách như vậy là một nhu cầu thường xuyên, bạn cũng có thể gọi trực tiếp
file_object = open('thefile.txt')
all_the_text = file_object.read(  )
file_object.close(  )
4 trên đối tượng tệp, để thao tác nhanh hơn và thuận tiện hơn một chút. Trong Python 2. 2, bạn cũng có thể chuyển đối tượng tệp trực tiếp dưới dạng đối số duy nhất cho loại tích hợp sẵn
file_object = open('thefile.txt')
all_the_text = file_object.read(  )
file_object.close(  )
5

Trên các hệ thống tương tự Unix và Unix, chẳng hạn như các biến thể Linux và BSD, không có sự phân biệt thực sự giữa tệp văn bản và tệp dữ liệu nhị phân. Tuy nhiên, trên các hệ thống Windows và Macintosh, các dấu kết thúc dòng trong tệp văn bản không được mã hóa bằng dấu phân cách

while True:
      data = binary_file.read()
      if not data:
           break
      #return hex rep and write
7 tiêu chuẩn, mà bằng
file_object = open('thefile.txt')
all_the_text = file_object.read(  )
file_object.close(  )
7 và
file_object = open('thefile.txt')
all_the_text = file_object.read(  )
file_object.close(  )
8, tương ứng. Python thay mặt bạn dịch các ký tự kết thúc dòng thành
while True:
      data = binary_file.read()
      if not data:
           break
      #return hex rep and write
7, nhưng điều này có nghĩa là bạn cần thông báo cho Python khi mở tệp nhị phân để nó không thực hiện dịch. Để làm điều đó, hãy sử dụng
list_of_all_the_lines = file_object.readlines(  )
list_of_all_the_lines = file_object.read(  ).splitlines(1)
list_of_all_the_lines = file_object.read().splitlines(  )
list_of_all_the_lines = file_object.read(  ).split('\n')
0 làm đối số thứ hai cho
file_object = open('thefile.txt')
all_the_text = file_object.read(  )
file_object.close(  )
0. Điều này là vô hại ngay cả trên các nền tảng giống Unix và ngay cả ở đó, đó là một thói quen tốt để phân biệt tệp nhị phân với tệp văn bản, mặc dù điều đó không bắt buộc trong trường hợp đó. Một thói quen tốt như vậy sẽ làm cho chương trình của bạn dễ hiểu hơn, cũng như cho phép bạn di chuyển chúng giữa các nền tảng dễ dàng hơn

Bạn có thể gọi các phương thức như

file_object = open('thefile.txt')
all_the_text = file_object.read(  )
file_object.close(  )
1 trực tiếp trên đối tượng tệp do hàm
file_object = open('thefile.txt')
all_the_text = file_object.read(  )
file_object.close(  )
0 tạo ra, như được hiển thị trong đoạn mã đầu tiên của giải pháp. Khi bạn thực hiện việc này, ngay sau khi thao tác đọc kết thúc, bạn không còn tham chiếu đến đối tượng tệp nữa. Trong thực tế, Python nhận thấy thiếu tham chiếu ngay lập tức và ngay lập tức đóng tệp. Tuy nhiên, tốt hơn là gắn một tên với kết quả của
file_object = open('thefile.txt')
all_the_text = file_object.read(  )
file_object.close(  )
0, để bạn có thể tự gọi
while True:
      data = binary_file.read()
      if not data:
           break
      #return hex rep and write
6 một cách rõ ràng khi hoàn thành tệp. Điều này đảm bảo rằng tệp luôn mở trong thời gian ngắn nhất có thể, ngay cả trên các nền tảng như Jython và các phiên bản tương lai giả định của Python trên đó các cơ chế thu gom rác tiên tiến hơn có thể trì hoãn việc đóng tự động mà Python thực hiện

Nếu bạn chọn đọc từng tệp một, thay vì đọc tất cả cùng một lúc, các thành ngữ sẽ khác. Đây là cách đọc tệp nhị phân 100 byte mỗi lần, cho đến khi bạn đọc đến cuối tệp

with open("portrait1.dng", "rb") as binaryfile :
    with open("readfile.raw", "wb") as newFile:
        while True:
            chunk = binaryfile.read(4096)
            if not chunk:
                break
            newFile.write(binascii.hexlify(chunk))
1

Truyền một đối số

list_of_all_the_lines = file_object.readlines(  )
list_of_all_the_lines = file_object.read(  ).splitlines(1)
list_of_all_the_lines = file_object.read().splitlines(  )
list_of_all_the_lines = file_object.read(  ).split('\n')
6 cho phương thức
file_object = open('thefile.txt')
all_the_text = file_object.read(  )
file_object.close(  )
1 đảm bảo rằng
file_object = open('thefile.txt')
all_the_text = file_object.read(  )
file_object.close(  )
1 sẽ chỉ đọc các byte tiếp theo của
list_of_all_the_lines = file_object.readlines(  )
list_of_all_the_lines = file_object.read(  ).splitlines(1)
list_of_all_the_lines = file_object.read().splitlines(  )
list_of_all_the_lines = file_object.read(  ).split('\n')
6 (hoặc ít hơn, nếu tệp gần cuối).
file_object = open('thefile.txt')
all_the_text = file_object.read(  )
file_object.close(  )
1 trả về chuỗi trống khi đến cuối tệp

Đọc một tệp văn bản một dòng tại một thời điểm là một nhiệm vụ thường xuyên. Trong Python 2. 2 trở lên, đây là cách tiếp cận dễ nhất, rõ ràng nhất và nhanh nhất

with open("portrait1.dng", "rb") as binaryfile :
    with open("readfile.raw", "wb") as newFile:
        while True:
            chunk = binaryfile.read(4096)
            if not chunk:
                break
            newFile.write(binascii.hexlify(chunk))
7

Một số thành ngữ phổ biến trong các phiên bản Python cũ hơn. Một thành ngữ mà bạn có thể chắc chắn sẽ hoạt động ngay cả trên các phiên bản Python cực kỳ cũ, chẳng hạn như 1. 5. 2, khá giống với thành ngữ để đọc một tệp nhị phân một đoạn tại một thời điểm

with open("portrait1.dng", "rb") as binaryfile :
    with open("readfile.raw", "wb") as newFile:
        while True:
            chunk = binaryfile.read(4096)
            if not chunk:
                break
            newFile.write(binascii.hexlify(chunk))
8

list_of_all_the_lines = list(file_object)
1, giống như
file_object = open('thefile.txt')
all_the_text = file_object.read(  )
file_object.close(  )
1, trả về chuỗi trống khi đến cuối tệp. Lưu ý rằng phần cuối của tệp có thể dễ dàng phân biệt với một dòng trống vì dòng sau được trả về bởi
list_of_all_the_lines = list(file_object)
1 là
while True:
      data = binary_file.read()
      if not data:
           break
      #return hex rep and write
7, đây không phải là một chuỗi trống mà là một chuỗi có độ dài 1

công thức 4. 3;

Làm cách nào để đọc từng byte từ tệp trong Python?

bạn có thể sử dụng bin(ord('b')) . replace('b', '') bin() nó cung cấp cho bạn biểu diễn nhị phân với 'b' sau bit cuối cùng, bạn phải xóa nó. Ngoài ra, ord() cung cấp cho bạn số ASCII cho ký tự được mã hóa char hoặc 8-bit/1 Byte.

Làm cách nào để đọc mảng byte trong Python?

Trăn. hàm bytearray() . Nó đưa ra một chuỗi các số nguyên có thể thay đổi trong phạm vi 0 <= x < 256. trả lại. Trả về một mảng byte có kích thước đã cho. tham số nguồn có thể được sử dụng để khởi tạo mảng theo một số cách khác nhau. bytearray() method returns a bytearray object which is an array of given bytes. It gives a mutable sequence of integers in the range 0 <= x < 256. Returns: Returns an array of bytes of the given size. source parameter can be used to initialize the array in few different ways.

làm thế nào. đọc công việc bằng Python?

read() trong Python được sử dụng để đọc tối đa n byte từ tệp được liên kết với bộ mô tả tệp đã cho . Nếu đã đến cuối tệp trong khi đọc byte từ bộ mô tả tệp đã cho, os. phương thức read() sẽ trả về một đối tượng byte trống cho tất cả các byte còn lại được đọc.