Ngôn ngữ lập trình Python rất nổi tiếng vì tính linh hoạt tuyệt vời của nó, cả về cú pháp và cách bạn có thể đạt được một mục tiêu nhất định. Trên thực tế, có vô số phương pháp khác nhau để một lập trình viên Python có được cùng một kết quả cuối cùng, từ việc sử dụng cú pháp ưa thích đến hack các chức năng tích hợp sẵn.
Trong bài viết này, tôi sẽ chỉ cho bạn 7 cách đọc nội dung của tệp trong Python
Chức năng open[] tích hợp trong trường học cũPhương pháp đầu tiên và cơ bản nhất để đọc tệp trong Python là sử dụng hàm open[]
tích hợp sẵn trả về một luồng có thể đọc được. Sau đó, bạn có thể sử dụng phương pháp read[]
để đọc nội dung của luồng
Giả sử chúng ta có một tệp tên là file.txt
trong cùng thư mục của tập lệnh Python
Ok, đó là một chút tầm thường và phi Pythonic. Hãy xem xét một cách tiếp cận tốt hơn
Mở bằng trình quản lý bối cảnhĐây là cách phổ biến nhất để đọc tệp trong Python. Trình quản lý bối cảnh ngăn rò rỉ bộ nhớ trong trường hợp có lỗi khi mở hoặc đọc từ tệp vì nó chịu trách nhiệm đóng tệp trong mọi trường hợp
Phương pháp này về cơ bản không khác so với phương pháp cũ, nhưng nó thường được coi là phương pháp tốt hơn, sạch hơn và an toàn hơn
Bây giờ chúng ta đã loại bỏ các cách tiếp cận “mặc định”, hãy chuyển sang các cách đọc nội dung tệp kỳ lạ hơn
Các nhà phát triển cho biết Python có một mô-đun cho mọi thứ. Và, không ngạc nhiên, nó cũng có một mô-đun để tương tác với hệ thống tệp có tên là pathlib
Đọc một tệp có pathlib
dễ dàng như tạo một đối tượng Path
và gọi phương thức read_text[]
của nó, không cần phải đóng luồng theo cách thủ công
Mặc dù rất dễ, nhưng thông thường bạn sẽ không tìm thấy cách tiếp cận này trong cơ sở mã Python vì nó yêu cầu nhập một mô-đun
Tiếp theo, chúng ta sẽ xem xét các "hack", hoặc các cách đọc tệp lạ, không mặc định để đạt được mục tiêu cuối cùng
Sử dụng vỏNếu bạn đã từng làm việc với một hệ điều hành giống UNIX, thì chắc chắn bạn đã quen thuộc với lệnh cat
tiêu chuẩn. Cái tên này thực sự bắt nguồn từ từ "concatenate" và không liên quan gì đến những con vật cưng dễ thương
Mô-đun subprocess
tích hợp cho phép bạn chạy các lệnh trình bao và xử lý đầu ra của chúng từ tập lệnh Python của bạn
Đối với những người sở hữu hệ điều hành Windows, bạn có thể sử dụng lệnh tương tự open[]
0 thay thế… hoặc chỉ cần chuyển sang Linux
Nếu bạn nghĩ rằng cách đọc tệp này là bất thường, hãy thắt lưng buộc bụng. chúng ta đang trở nên kỳ lạ hơn
Điều gì sẽ xảy ra nếu bạn không hài lòng với các chức năng tích hợp sẵn của Python? . Để giữ cho bài viết ngắn gọn, tôi sẽ không giải thích toàn bộ quá trình tạo tiện ích mở rộng C cho Python. Nếu bạn muốn tìm hiểu thêm về chủ đề này, hãy xem hướng dẫn này
Trước hết, bạn phải viết phần mở rộng C
Sau đó, bạn tạo tập lệnh open[]
1
Cuối cùng, bạn xây dựng và cài đặt tiện ích mở rộng C
python3 setup.py build
python3 setup.py install --user
Bây giờ bạn có thể nhập mô-đun C tùy chỉnh vào tập lệnh Python của mình
Điều này hơi quá phức tạp khi chỉ đọc nội dung của một tệp, phải không?
Xây dựng một máy chủ web để phục vụ tệpChúng tôi sẽ sử dụng mô-đun open[]
2 tích hợp của Python để chạy một máy chủ web nhỏ để gửi tệp qua HTTP
Ngoài ra, bạn có thể sử dụng thư viện open[]
3 để yêu cầu nội dung tệp từ máy chủ
Khá bất thường, phải không?
Brute-force nội dung tập tinCó thể đọc một tập tin mà không cần mở nó? . Tuy nhiên, để đạt được điều này, chúng tôi không thể mở tệp trực tiếp bằng Python, vì vậy chúng tôi sẽ tận dụng lợi thế của lệnh open[]
4 UNIX trả về hàm băm md5 của một tệp đã cho
Khi chúng tôi có tổng kiểm tra, chúng tôi bắt đầu sử dụng vũ lực cho đến khi chúng tôi tìm thấy kết hợp byte chính xác
Cách tiếp cận này là khủng khiếp và tuyệt vời cùng một lúc. Số lượng kết hợp tối đa mà nó phải kiểm tra trước khi tìm đúng nội dung tệp là open[]
5 trong đó open[]
6 là kích thước của tệp tính bằng byte và open[]
7 là số lượng kết hợp có thể có trong một byte
Cho dù phương pháp này kém hiệu quả đến đâu, tập lệnh Python của bạn cuối cùng sẽ đoán nội dung tệp mà không cần đọc nó, trừ khi máy tính của bạn chết trước
Phần kết luậnTóm lại, có vô số cách để bạn có thể đọc nội dung của một tệp trong Python. Một số có ý nghĩa và nên được sử dụng trong các cơ sở mã thực, trong khi một số khác là các bản hack bí truyền và chỉ nhằm mục đích chứng minh khái niệm hoặc một bài tập viết mã
Tôi hy vọng bạn thích bài viết này. Nếu bạn có bất kỳ cách đọc ưa thích nào khác từ một tệp trong Python, vui lòng chia sẻ nó trong phần nhận xét. Cảm ơn vì đã đọc
Nếu bạn muốn tìm hiểu thêm về các tiện ích mở rộng C cho Python, tôi khuyên bạn nên xem câu chuyện dưới đây