Hướng dẫn how to encode a text file in python - cách mã hóa một tệp văn bản trong python
Một cuộc thảo luận gần đây về danh sách gửi thư Python-Ideas cho thấy rõ rằng chúng tôi (tức là các nhà phát triển Python cốt lõi) cần cung cấp một số hướng dẫn rõ ràng hơn về cách xử lý các tác vụ xử lý văn bản kích hoạt các ngoại lệ theo mặc định trong Python 3, nhưng trước đó Rug by Python 2 của BLITHE giả định rằng tất cả các tệp được mã hóa trong Lat Latin-1. Mặc dù chúng tôi sẽ có một cái gì đó trong các tài liệu chính thức trước khi quá lâu, nhưng đây là nỗ lực sơ bộ của riêng tôi trong việc tóm tắt các tùy chọn để xử lý các tệp văn bản và sự đánh đổi khác nhau giữa chúng. Câu hỏi rõ ràng để đặt ra là những gì đã thay đổi trong Python 3 để các phương pháp phổ biến mà các nhà phát triển sử dụng để sử dụng để xử lý văn bản trong Python 2 hiện đã bắt đầu ném Sự khác biệt chính là hành vi xử lý văn bản mặc định trong Python 3 nhằm mục đích phát hiện các vấn đề mã hóa văn bản càng sớm càng tốt - khi đọc văn bản được mã hóa không đúng Trong mã hóa mục tiêu (được biểu thị bằng Điều này tương phản với cách tiếp cận Python 2 cho phép tham nhũng dữ liệu theo mặc định và kiểm tra chính xác nghiêm ngặt phải được yêu cầu một cách rõ ràng. Điều đó chắc chắn có thể thuận tiện khi dữ liệu được xử lý chủ yếu là văn bản ASCII, và một chút tham nhũng dữ liệu không có khả năng được phát hiện, chứ đừng nói đến việc gây ra vấn đề, nhưng nó hầu như không phải là nền tảng vững chắc để xây dựng các ứng dụng đa ngôn ngữ mạnh mẽ đã từng phải theo dõi một Tuy nhiên, Python 3 không cung cấp một số cơ chế để thư giãn các kiểm tra nghiêm ngặt mặc định để xử lý các trường hợp sử dụng xử lý văn bản khác nhau (đặc biệt, các trường hợp sử dụng trong đó việc xử lý tốt nhất là có thể chấp nhận được và không cần phải có tính đúng đắn nghiêm ngặt). Bài viết này nhằm giải thích một số trong số họ bằng cách xem xét các trường hợp sẽ phù hợp để sử dụng chúng. Lưu ý rằng nhiều tính năng tôi thảo luận dưới đây cũng có sẵn trong Python 2, nhưng bạn phải truy cập rõ ràng chúng thông qua loại Để xử lý văn bản một cách hiệu quả trong Python 3, nó cần phải tìm hiểu ít nhất một lượng nhỏ về mã hóa Unicode và văn bản: Người xử lý lỗi UnicodeĐể giúp tiêu chuẩn hóa các kỹ thuật khác nhau để xử lý các lỗi mã hóa và giải mã unicode, Python bao gồm một khái niệm về trình xử lý lỗi Unicode được tự động gọi bất cứ khi nào gặp sự cố trong quá trình mã hóa hoặc giải mã văn bản. Tôi sẽ không bao gồm tất cả chúng trong bài viết này, nhưng ba người có ý nghĩa đặc biệt:
Tùy chọn nhị phânMột thay thế luôn có sẵn là mở các tệp ở chế độ nhị phân và xử lý chúng dưới dạng byte chứ không phải là văn bản. Điều này có thể hoạt động trong nhiều trường hợp, đặc biệt là những trường hợp các điểm đánh dấu ASCII được nhúng trong dữ liệu nhị phân tùy ý thực sự. Tuy nhiên, đối với cả dữ liệu văn bản của người Viking với dữ liệu văn bản không xác định và dữ liệu văn bản với mã hóa đã biết, nhưng có khả năng chứa các lỗi mã hóa, thường nên đưa chúng vào một dạng có thể được xử lý dưới dạng chuỗi văn bản. Cụ thể, một số API chấp nhận cả byte và văn bản có thể rất nghiêm ngặt về việc mã hóa các byte mà họ chấp nhận (ví dụ, mô-đun Xử lý tệp văn bảnPhần này khám phá một số trường hợp sử dụng có thể phát sinh khi xử lý văn bản. Mã hóa văn bản là một chủ đề đủ phức tạp mà không có kích thước nào phù hợp với tất cả các câu trả lời - câu trả lời đúng cho một ứng dụng nhất định sẽ phụ thuộc vào các yếu tố như:
Các tệp trong mã hóa tương thích ASCII, nỗ lực tốt nhất là chấp nhận được.Trường hợp sử dụng: Các tệp được xử lý là trong mã hóa tương thích ASCII, nhưng bạn không biết chính xác cái nào. Tất cả các tệp phải được xử lý mà không kích hoạt bất kỳ ngoại lệ nào, nhưng một số rủi ro tham nhũng dữ liệu được coi là chấp nhận được (ví dụ: đối chiếu các tệp nhật ký từ nhiều nguồn trong đó một số lỗi dữ liệu được chấp nhận, miễn là các bản ghi vẫn còn nguyên vẹn). the files to be processed are in an ASCII compatible encoding, but you don’t know exactly which one. All files must be processed without triggering any exceptions, but some risk of data corruption is deemed acceptable (e.g. collating log files from multiple sources where some data errors are acceptable, so long as the logs remain largely intact). Cách tiếp cận: Sử dụng mã hóa Latin-1-1 để ánh xạ các giá trị byte trực tiếp đến 256 điểm mã Unicode đầu tiên. Đây là Python 3 tương đương gần nhất cung cấp cho mô hình xử lý văn bản Python 2 cho phép. use the “latin-1” encoding to map byte values directly to the first 256 Unicode code points. This is the closest equivalent Python 3 offers to the permissive Python 2 text handling model. Ví dụ: Ghi chú Mặc dù mã hóa Windows ____23 đôi khi cũng được gọi là Lat Latin-1, nhưng nó không ánh xạ tất cả các giá trị byte có thể và do đó cần được sử dụng kết hợp với trình xử lý lỗi Consequences:
Các tệp trong mã hóa tương thích ASCII, giảm thiểu rủi ro tham nhũng dữ liệuTrường hợp sử dụng: Các tệp được xử lý là trong mã hóa tương thích ASCII, nhưng bạn không biết chính xác cái nào. Tất cả các tệp phải được xử lý mà không kích hoạt bất kỳ ngoại lệ nào, nhưng một số lỗi liên quan đến Unicode đều được chấp nhận để giảm nguy cơ tham nhũng dữ liệu (ví dụ: đối chiếu các tệp nhật ký từ nhiều nguồn đối với các lỗi lập trình vi phạm giả định chỉ viết lại dữ liệu trong mã hóa ban đầu của nó) the files to be processed are in an ASCII compatible encoding, but you don’t know exactly which one. All files must be processed without triggering any exceptions, but some Unicode related errors are acceptable in order to reduce the risk of data corruption (e.g. collating log files from multiple sources, but wanting more explicit notification when the collated data is at risk of corruption due to programming errors that violate the assumption of writing the data back out only in its original encoding) Cách tiếp cận: Sử dụng mã hóa Ví dụ: Consequences:
Các tệp trong một mã hóa cụ thể nền tảng điển hìnhTrường hợp sử dụng: Các tệp được xử lý trong một mã hóa nhất quán, mã hóa có thể được xác định từ các chi tiết hệ điều hành và cài đặt ngôn ngữ và có thể từ chối xử lý các tệp không được mã hóa đúng. the files to be processed are in a consistent encoding, the encoding can be determined from the OS details and locale settings and it is acceptable to refuse to process files that are not properly encoded. Cách tiếp cận: Chỉ cần mở tệp trong chế độ văn bản. Trường hợp sử dụng này mô tả hành vi mặc định trong Python 3. simply open the file in text mode. This use case describes the default behaviour in Python 3. Ví dụ: Consequences:
Các tệp trong một mã hóa nhất quán, được biết đếnTrường hợp sử dụng: Các tệp được xử lý trên danh nghĩa trong một mã hóa nhất quán, bạn biết mã hóa chính xác trước và có thể chấp nhận từ chối xử lý các tệp không được mã hóa đúng. Điều này ngày càng trở nên phổ biến hơn, đặc biệt là với nhiều định dạng tệp văn bản bắt đầu chuẩn hóa trên UTF-8 như mã hóa văn bản ưa thích. the files to be processed are nominally in a consistent encoding, you know the exact encoding in advance and it is acceptable to refuse to process files that are not properly encoded. This is becoming more and more common, especially with many text file formats beginning to standardise on UTF-8 as the preferred text encoding. Cách tiếp cận: Mở tệp ở chế độ văn bản với mã hóa thích hợp open the file in text mode with the appropriate encoding Ví dụ: Consequences:
Các tệp trong một mã hóa nhất quán, được biết đếnTrường hợp sử dụng: Các tệp được xử lý trên danh nghĩa trong một mã hóa nhất quán, bạn biết mã hóa chính xác trước và có thể chấp nhận từ chối xử lý các tệp không được mã hóa đúng. Điều này ngày càng trở nên phổ biến hơn, đặc biệt là với nhiều định dạng tệp văn bản bắt đầu chuẩn hóa trên UTF-8 như mã hóa văn bản ưa thích. the files to be processed include markers that specify the nominal encoding (with a default encoding assumed if no marker is present) and it is acceptable to refuse to process files that are not properly encoded. Cách tiếp cận: Trước tiên, hãy mở tệp ở chế độ nhị phân để tìm điểm đánh dấu mã hóa, sau đó mở lại ở chế độ văn bản với mã hóa được xác định. first open the file in binary mode to look for the encoding marker, then reopen in text mode with the identified encoding. Ví dụ: Consequences:
Nhận xét được cung cấp bởi Làm thế nào để bạn mã hóa một tệp trong Python?Tập tin & mã hóa ký tự.. Mở một tệp văn bản. Nếu bạn muốn đọc hoặc viết một tệp văn bản có Python, trước tiên phải mở tệp. .... Đọc một tệp văn bản. Một đối tượng tệp không chứa văn bản có thể đọc được. .... Viết một tệp văn bản. .... Thêm mã hóa (UTF-8). .... Mẹo gỡ lỗi. .... Nâng cao hơn: Mở và đọc tất cả các tệp trong một thư mục .. Làm cách nào để mã hóa một tệp văn bản?Chọn một tiêu chuẩn mã hóa khi bạn mở một tệp.. Nhấp vào tab Tệp .. Nhấp vào Tùy chọn .. Nhấp vào nâng cao .. Cuộn đến phần chung, sau đó chọn chuyển đổi định dạng tệp xác nhận trên hộp kiểm Mở..... Đóng rồi mở lại tệp .. Trong hộp thoại Chuyển đổi tệp, chọn văn bản được mã hóa .. Mã hóa = 'latin1 trong python là gì?Latin Latin-1 là một mã hóa tương thích ASCII quan trọng khác, vì nó ánh xạ các giá trị byte trực tiếp đến 256 điểm mã Unicode đầu tiên.maps byte values directly to the first 256 Unicode code points.
Mã hóa là gì = 'utfUTF-8 là mã hóa theo định hướng byte.Mã hóa chỉ định rằng mỗi ký tự được biểu diễn bằng một chuỗi cụ thể của một hoặc nhiều byte.specifies that each character is represented by a specific sequence of one or more bytes. |