Rb nghĩa là gì trong python?

Gần đây, chúng tôi đã bắt đầu chuyển mã của mình từ Python 2 sang Python 3. Quá trình này phần lớn diễn ra suôn sẻ vì hầu hết mã hoạt động rất giống nhau trong cả hai phiên bản. Tuy nhiên, có một số thay đổi lớn không cho phép mã Python 2 hoạt động trong Python 3. Bài đăng này liên quan đến một trường hợp cụ thể về điều đó, trong việc đọc và ghi tệp văn bản có đầu vào và đầu ra

 

Phải thừa nhận rằng chúng tôi không thành thạo lắm về mã hóa và không phải lúc nào cũng áp dụng đúng cách. Tôi đã biết về sự khác biệt đó trong việc đọc và ghi tệp không phải thông qua nghiên cứu trước khi di chuyển, mà chỉ bằng cách cố gắng chạy mã Python 2 cũ trong Python 3

 

Để đọc và viết các chuỗi, chúng tôi sẽ sử dụng 'rb' và 'wb' trong Python 2, nhưng làm tương tự trên Python 3 sẽ gây ra đủ loại lỗi. Thay vào đó, sử dụng 'r' và 'w' sẽ giải quyết được những vấn đề này, nhưng tôi muốn tìm hiểu sâu hơn để hiểu những gì chúng tôi đã làm sai

 

Vấn đề

Cái này

with open['test.txt', 'w'] as f:
    text = f.write['this is a test string']

làm

điều này, tuy nhiên

with open['test.txt', 'wb'] as f:
    text = f.write['this is a test string']

ném lỗi này

TypeError: a bytes-like object is required, not 'str'

Tuy nhiên, cả hai đều hoạt động trên Python 2

Tương tự như vậy, điều này

with open['test.txt', 'r'] as f:
    text = f.read[]
print[text]
print[text == 'this is a test string']

lợi nhuận

this is a test string
True

điều này, tuy nhiên

with open['test.txt', 'rb'] as f:
    text = f.read[]
print[text]
print[text == 'this is a test string']

lợi nhuận

b'this is a test string'
False

Một lần nữa, 'r' hoặc 'rb' sẽ hoạt động trên Python 2

 

Từ đầu ra, bạn có thể thấy rằng Python 3 xử lý các chuỗi khác nhau, mong đợi đầu vào byte và tạo ra đầu ra byte khi 'b' được thêm vào 'r' hoặc 'w' [b cho chế độ nhị phân và không có b, chế độ văn bản]. Tuy nhiên, Python 2 bằng cách nào đó có thể xử lý đầu vào chuỗi và có thể đặt đầu ra thành một chuỗi bất kể

 

Chuyện gì đang xảy ra?

Đề cập đến quan chức, trường hợp có thêm chữ 'b' hay không

Trên Windows, 'b' được thêm vào chế độ sẽ mở tệp ở chế độ nhị phân, do đó, cũng có các chế độ như 'rb''wb' và 

with open['test.txt', 'wb'] as f:
    text = f.write['this is a test string']
0. Python trên Windows phân biệt giữa tệp văn bản và tệp nhị phân; . Việc sửa đổi hậu trường này đối với dữ liệu tệp phù hợp với các tệp văn bản ASCII, nhưng nó sẽ làm hỏng dữ liệu nhị phân như vậy trong các tệp _______1_______1 hoặc 
with open['test.txt', 'wb'] as f:
    text = f.write['this is a test string']
2. Hãy thật cẩn thận khi sử dụng chế độ nhị phân khi đọc và ghi các tệp đó. Trên Unix, việc thêm 'b' vào chế độ không gây hại gì, vì vậy bạn có thể sử dụng nó một cách độc lập với nền tảng cho tất cả các tệp nhị phân

Vì vậy, rõ ràng có một số phép thuật đằng sau hậu trường đang diễn ra và đối với các tệp văn bản, chế độ nhị phân sẽ là một trường hợp bắt tất cả các trường hợp cho phép mã hoạt động trên mọi nền tảng

 

Tuy nhiên, trên chính thức, điều này được nói

Thông thường, các tệp được mở ở chế độ văn bản, nghĩa là bạn đọc và ghi các chuỗi từ và đến tệp, được mã hóa bằng một mã hóa cụ thể. Nếu mã hóa không được chỉ định, mặc định sẽ phụ thuộc vào nền tảng [xem ]. 'b' được thêm vào chế độ sẽ mở tệp ở chế độ nhị phân. bây giờ dữ liệu được đọc và ghi dưới dạng các đối tượng byte. Chế độ này nên được sử dụng cho tất cả các tệp không chứa văn bản

Vì vậy, nên sử dụng chế độ văn bản [không có 'b'] trong việc đọc và ghi tệp văn bản

 

Phần kết luận

Tôi nghĩ rằng tôi có thể hiểu những gì đang diễn ra trong Python 3 và nó nghe có vẻ trực quan. Chế độ nhị phân đọc và ghi byte, chế độ văn bản đọc và ghi văn bản. Nhưng sau khi biết về điều đó, bây giờ tôi hơi bối rối không biết Python 2 đang làm gì để xử lý nó. Dù bằng cách nào, bài học rút ra là cùng một mã có thể không hoạt động trên các phiên bản Python khác nhau và cần phải cẩn thận hơn trong quá trình di chuyển trước khi xảy ra lỗi với hậu quả nghiêm trọng hơn. Tôi có thể không đúng trong phân tích trên, vì vậy hãy đóng góp bằng một bình luận bên dưới. Rất thích tìm hiểu thêm về nó. Chúc mừng

Nếu chúng ta mở một tệp trong python bằng công cụ sửa đổi b. Tệp được mở ở chế độ nhị phân bằng công cụ sửa đổi 'b'. Bất kỳ tệp nào có định dạng không bao gồm các ký tự có thể đọc được được gọi là tệp "nhị phân". Tệp nhị phân bao gồm tệp âm thanh như MP3, định dạng văn bản như Word hoặc PDF và tệp hình ảnh như JPEG hoặc GIF. Các tệp được tự động mở ở chế độ văn bản trong Python. Khi chọn chế độ, hãy bao gồm chữ "b" cho chế độ nhị phân

Theo mặc định, hàm open[] mở tệp ở định dạng văn bản. Do đó, chế độ "wb" mở tệp ở định dạng nhị phân để ghi trong khi tùy chọn "rb" mở tệp ở định dạng nhị phân để đọc. Các tệp nhị phân không thể đọc được bởi con người, trái ngược với các tệp văn bản. Có thể sử dụng bất kỳ trình soạn thảo văn bản nào để mở dữ liệu nhưng không sử dụng được

Các chế độ khác nhau để mở tệp ở định dạng nhị phân

Sau đây là các chế độ khác nhau để mở tệp ở định dạng nhị phân –

b - Mở chế độ nhị phân

ab − Nó mở tệp ở định dạng nhị phân, nhưng nếu không thì giống hệt với một chế độ [Trong một chế độ, tệp được mở để nối thêm. Con trỏ ở cuối tệp nếu nó hiện diện;

Thí dụ

Sau đây là một ví dụ để mở tệp ở chế độ ab -

đầu ra

Sau đây là một đầu ra của ví dụ trên

Name of the file:  file.txt
Opening mode :  ab

ab+ − Tệp mở ở định dạng nhị phân, nhưng khác thì tương tự như chế độ a+ [chế độ a+ cho phép đọc và thêm vào tệp. Nếu tệp đã tồn tại thì con trỏ tệp nằm ở cuối tệp;

wb − Tương tự như chế độ w, nhưng mở tệp ở định dạng nhị phân [chế độ w cho phép ghi bằng cách mở tệp. thay thế tệp hiện có và tạo tệp mới nếu tệp hiện có không có]

Thí dụ

Đoạn mã sau tạo một tệp nhị phân và lưu danh sách các số nguyên trong đó. Trước khi viết, danh sách đầu tiên được chuyển đổi thành một mảng byte. bytearray[], một hàm bên trong, trả về một biểu diễn byte của mục

file=open["files.txt","wb"] numbers=[50, 100, 125, 230, 254] array=bytearray[numbers] file.write[array] file.close[] print ["File Created"]

đầu ra

Ở đầu ra, chúng ta có thể thấy một tệp mới được tạo với tên “files. txt”

File Created

wb+ − Tệp được mở ở định dạng nhị phân, không giống như w+ [w+ mở tệp ở chế độ chỉ đọc và chỉ ghi; phần còn lại tương tự như chế độ w]

rb − Nó mở tệp ở chế độ nhị phân, nhưng khác thì giống với chế độ r [Chế độ r i. e. chế độ chỉ đọc được sử dụng để mở tệp. Con trỏ tệp nằm ở đầu tệp. Ngoài ra, đây là chế độ mặc định]

Thí dụ

file = open['file.txt', 'rb'] file_info = file.read[] file.close[] print ["File Created"]

đầu ra

Ở đầu ra, chúng ta có thể thấy một tệp mới được tạo với tên “files. txt”

File Created

rb+ − Tương tự như chế độ r+, thay vào đó chỉ mở tệp ở chế độ nhị phân [chế độ r+ mở tệp để tệp có thể được đọc và ghi vào. Điểm bắt đầu của tệp là nơi có con trỏ]

Lưu ý - Mã ví dụ cho tất cả các chế độ sẽ giống nhau, chỉ cần thay thế các chế độ i. e rb, rb+, wb, wb+ e. tc. khi cần thiết

Việc sử dụng chế độ Rb+ trong Python là gì?

rb+ Mở tệp để đọc và ghi ở định dạng nhị phân . Con trỏ tệp đặt ở đầu tệp. Viết câu lệnh bằng Python để thực hiện các thao tác sau. Để mở tệp văn bản 'SÁCH.

Ý nghĩa của RB ở chế độ nhị phân là gì?

r+ được sử dụng cho chế độ đọc và ghi. b là dành cho nhị phân. Chế độ r+b là mở tệp nhị phân ở chế độ đọc hoặc ghi .

Đâu là sự khác biệt giữa Rvà RB?

Trên Linux và Unix nói chung, "r" và "rb" giống nhau . Cụ thể hơn, một con trỏ FILE thu được bằng cách fopen[] nhập một tệp ở chế độ văn bản và ở chế độ nhị phân hoạt động theo cùng một cách trên Unix.

RB trong dưa chua là gì?

Quá trình tải lại tệp đã chọn vào chương trình Python tương tự như quá trình bạn đã thấy trước đó. sử dụng lại hàm open[], nhưng lần này với 'rb' làm đối số thứ hai [thay vì wb ]. R là viết tắt của chế độ đọc và b là viết tắt của chế độ nhị phân. Bạn sẽ đọc một tệp nhị phân.

Chủ Đề