Một nhiệm vụ phổ biến trong lập trình là mở tệp và phân tích nội dung của nó. Bạn sẽ làm gì khi tệp bạn đang cố xử lý khá lớn, chẳng hạn như vài GB dữ liệu hoặc lớn hơn? . Mặc dù tùy thuộc vào bạn để xác định kích thước phù hợp cho các khối dữ liệu mà bạn đang xử lý, nhưng đối với nhiều ứng dụng, việc xử lý một tệp tại một thời điểm là phù hợp
Trong suốt bài viết này, chúng tôi sẽ đề cập đến một số ví dụ mã minh họa cách đọc tệp theo từng dòng. Trong trường hợp bạn muốn tự mình thử một số ví dụ này, bạn có thể tìm thấy mã được sử dụng trong bài viết này tại repo GitHub sau
Tệp IO cơ bản trong Python
Python là một ngôn ngữ lập trình có mục đích chung tuyệt vời và nó có một số chức năng IO tệp rất hữu ích trong thư viện tiêu chuẩn gồm các hàm và mô-đun tích hợp sẵn
Chức năng
fp.close[]
1 tích hợp là những gì bạn sử dụng để mở một mục đích đọc hoặc viết. Đây là cách bạn có thể sử dụng nó để mở một tập tinfp = open['path/to/file.txt', 'r']
Như đã trình bày ở trên, hàm
fp.close[]
1 nhận nhiều đối số. Chúng tôi sẽ tập trung vào hai đối số, với đối số đầu tiên là tham số chuỗi vị trí biểu thị đường dẫn đến tệp bạn muốn mở. Tham số thứ hai [tùy chọn] cũng là một chuỗi và nó chỉ định chế độ tương tác mà bạn định sử dụng trên đối tượng tệp được trả về bởi lệnh gọi hàm. Các chế độ phổ biến nhất được liệt kê trong bảng bên dưới, với chế độ mặc định là 'r' để đọcChế độ Mô tảfp.close[]
3Mở để đọc văn bản thuần túyfp.close[]
4Mở để viết văn bản thuần túyfp.close[]
5Mở tệp hiện có để nối thêm văn bản thuần túyfp.close[]
6Mở để đọc dữ liệu nhị phânfp.close[]
7Mở để ghi dữ liệu nhị phânKhi bạn đã viết hoặc đọc tất cả dữ liệu mong muốn trong một đối tượng tệp, bạn cần đóng tệp để tài nguyên có thể được phân bổ lại trên hệ điều hành mà mã đang chạy trên đó
fp.close[]
Ghi chú. Việc đóng tài nguyên đối tượng tệp luôn là một phương pháp hay, nhưng đó là một nhiệm vụ rất dễ quên
Mặc dù bạn luôn có thể nhớ gọi
fp.close[]
8 trên một đối tượng tệp, nhưng có một cách thay thế và thanh lịch hơn để mở một đối tượng tệp và đảm bảo rằng trình thông dịch Python sẽ dọn sạch sau khi sử dụngChỉ cần sử dụng từ khóa
fp.close[]
9 [được giới thiệu trong Python 2. 5] đối với mã chúng tôi sử dụng để mở một đối tượng tệp, Python sẽ làm điều gì đó tương tự như mã sau. Điều này đảm bảo rằng bất kể đối tượng tệp nào được đóng sau khi sử dụngMột trong hai phương pháp này đều phù hợp, với ví dụ đầu tiên là Pythonic hơn
Đối tượng tệp được trả về từ hàm
fp.close[]
1 có ba phương thức rõ ràng phổ biến [fp = open['path/to/file.txt', 'r']
21, fp = open['path/to/file.txt', 'r']
22 và fp = open['path/to/file.txt', 'r']
23] để đọc dữ liệu. Phương thức fp = open['path/to/file.txt', 'r']
21 đọc tất cả dữ liệu thành một chuỗi. Điều này hữu ích cho các tệp nhỏ hơn mà bạn muốn thực hiện thao tác văn bản trên toàn bộ tệp. Sau đó, có fp = open['path/to/file.txt', 'r']
22, đây là một cách hữu ích để chỉ đọc từng dòng riêng lẻ, với số lượng tăng dần tại một thời điểm và trả về chúng dưới dạng chuỗi. Phương thức rõ ràng cuối cùng, fp = open['path/to/file.txt', 'r']
23, sẽ đọc tất cả các dòng của tệp và trả về chúng dưới dạng danh sách các chuỗiGhi chú. Trong phần còn lại của bài viết này, chúng ta sẽ làm việc với văn bản của cuốn sách "Iliad of Homer", có thể tìm thấy tại gutenberg. org, cũng như trong repo GitHub chứa mã cho bài viết này
Đọc từng dòng tệp trong Python với readline[]
Hãy bắt đầu với phương thức
fp = open['path/to/file.txt', 'r']
22, phương thức đọc một dòng, phương thức này sẽ yêu cầu chúng ta sử dụng bộ đếm và tăng nófp = open['path/to/file.txt', 'r']
2Đoạn mã này mở một đối tượng tệp có tham chiếu được lưu trữ trong
fp = open['path/to/file.txt', 'r']
28, sau đó đọc từng dòng một bằng cách gọi fp = open['path/to/file.txt', 'r']
22 trên đối tượng tệp đó lặp đi lặp lại trong một vòng lặp fp.close[]
20. Sau đó, nó chỉ cần in dòng ra bàn điều khiểnChạy mã này, bạn sẽ thấy một cái gì đó như sau
fp.close[]
2Mặc dù, cách tiếp cận này là thô và rõ ràng. Chắc chắn không phải là rất Pythonic. Chúng ta có thể sử dụng phương pháp
fp = open['path/to/file.txt', 'r']
23 để làm cho mã này ngắn gọn hơn nhiềuĐọc từng dòng tệp với readlines[]
Phương thức
fp = open['path/to/file.txt', 'r']
23 đọc tất cả các dòng và lưu trữ chúng vào một fp.close[]
23. Sau đó, chúng tôi có thể lặp lại danh sách đó và sử dụng fp.close[]
24, tạo chỉ mục cho từng dòng để thuận tiện cho chúng tôifp.close[]
8Hãy xem hướng dẫn thực hành, thực tế của chúng tôi để học Git, với các phương pháp hay nhất, tiêu chuẩn được ngành chấp nhận và bao gồm bảng gian lận. Dừng các lệnh Git trên Google và thực sự tìm hiểu nó
Kết quả này trong
fp.close[]
9Bây giờ, mặc dù tốt hơn nhiều, chúng ta thậm chí không cần gọi phương thức
fp = open['path/to/file.txt', 'r']
23 để đạt được chức năng tương tự. Đây là cách truyền thống để đọc từng dòng một tệp, nhưng có một cách hiện đại hơn, ngắn hơnĐọc từng dòng tệp bằng vòng lặp for - Cách tiếp cận Pythonic nhất
Bản thân
fp.close[]
26 được trả về là một lần lặp. Chúng tôi hoàn toàn không cần trích xuất các dòng qua fp = open['path/to/file.txt', 'r']
23 - chúng tôi có thể tự lặp lại đối tượng được trả về. Điều này cũng giúp bạn dễ dàng fp.close[]
24 nó để chúng ta có thể viết số dòng trong mỗi câu lệnh fp.close[]
29Đây là cách tiếp cận ngắn nhất, Pythonic nhất để giải quyết vấn đề và cách tiếp cận được hầu hết mọi người ưa chuộng.
fp.close[]
5Kết quả này trong
fp.close[]
6Ở đây, chúng ta đang tận dụng các chức năng tích hợp sẵn của Python cho phép chúng ta lặp lại dễ dàng trên một đối tượng có thể lặp lại, chỉ cần sử dụng vòng lặp
fp.close[]
80. Nếu bạn muốn đọc thêm về các chức năng tích hợp sẵn của Python trên các đối tượng lặp, chúng tôi đã giới thiệu cho bạnLàm thế nào bạn có thể sử dụng điều này thực tế? . Hầu hết thời gian, sẽ không khôn ngoan nếu đọc toàn bộ kho ngữ liệu vào bộ nhớ. Mặc dù thô sơ, bạn có thể viết một giải pháp từ đầu để đếm tần suất của một số từ nhất định mà không cần sử dụng bất kỳ thư viện bên ngoài nào. Hãy viết một tập lệnh đơn giản tải vào một tệp, đọc từng dòng một và đếm tần suất xuất hiện của các từ, in ra 10 từ thường xuyên nhất và số lần xuất hiện của chúng
fp.close[]
8Tập lệnh sử dụng mô-đun
fp.close[]
81 để đảm bảo rằng tệp chúng tôi đang cố đọc thực sự tồn tại. Nếu vậy, nó sẽ đọc từng dòng và mỗi dòng được chuyển vào hàm fp.close[]
82. Nó phân định khoảng cách giữa các từ và thêm từ đó vào từ điển - fp.close[]
83. Sau khi tất cả các dòng được ghi vào từ điển, chúng tôi sắp xếp nó qua fp.close[]
84 trả về danh sách các bộ ở định dạng fp.close[]
85, được sắp xếp theo số lượng từCuối cùng, chúng tôi in mười từ phổ biến nhất
Thông thường, đối với điều này, bạn sẽ tạo Mô hình Túi từ, sử dụng các thư viện như NLTK, tuy nhiên, việc triển khai này sẽ đủ. Hãy chạy tập lệnh và cung cấp
fp.close[]
86 của chúng tôi cho nófp.close[]
5Kết quả này trong
fp.close[]
0Phần kết luận
Trong bài viết này, chúng ta đã khám phá nhiều cách để đọc từng dòng một tệp trong Python, cũng như tạo mô hình Túi từ thô sơ để tính toán tần suất của các từ trong một tệp nhất định