Hướng dẫn how do you access a file in python? - làm thế nào để bạn truy cập một tập tin trong python?
Xem bây giờ hướng dẫn này có một khóa học video liên quan được tạo bởi nhóm Python thực sự. Xem cùng với hướng dẫn bằng văn bản để hiểu sâu hơn về sự hiểu biết của bạn: Công thức nấu ăn thực tế để làm việc với các tệp trong Python This tutorial has a related video course created by the Real Python team. Watch it together with the written tutorial to deepen your understanding: Practical Recipes for Working With Files in Python Show
Python có một số mô-đun và chức năng tích hợp để xử lý các tệp. Các chức năng này được trải ra trên một số mô -đun như 5, 6, 7 và 8, để đặt tên cho một số. Bài viết này tập hợp ở một nơi nhiều chức năng bạn cần biết để thực hiện các hoạt động phổ biến nhất trên các tệp trong Python.Trong hướng dẫn này, bạn sẽ học cách:
Python xông vào với Mở ra (phạm vi) như mô hìnhĐọc và ghi dữ liệu vào các tệp bằng Python khá đơn giản. Để làm điều này, trước tiên bạn phải mở các tệp ở chế độ thích hợp. Ở đây, một ví dụ về cách sử dụng Python, với Mở (Mạnh) như mẫu của Google để mở một tệp văn bản và đọc nội dung của nó:
00 lấy tên tệp và chế độ làm đối số của nó. 01 Mở tệp trong chế độ chỉ đọc. Để ghi dữ liệu vào một tệp, thay vào đó, hãy truyền vào 02 dưới dạng đối số: thay vào đó:
Trong các ví dụ ở trên, 00 mở các tệp để đọc hoặc ghi và trả về một tay cầm tệp ( 04 trong trường hợp này) cung cấp các phương thức có thể được sử dụng để đọc hoặc ghi dữ liệu vào tệp. Kiểm tra đọc và ghi các tệp trong Python và làm việc với tệp I/O trong Python để biết thêm thông tin về cách đọc và ghi vào các tệp.Nhận một danh sách thư mụcGiả sử thư mục làm việc hiện tại của bạn có một thư mục con gọi là 05 có nội dung sau:
Mô-đun 5 tích hợp có một số chức năng hữu ích có thể được sử dụng để liệt kê nội dung thư mục và lọc kết quả. Để có được danh sách tất cả các tệp và thư mục trong một thư mục cụ thể trong hệ thống tập tin, hãy sử dụng 07 trong các phiên bản cũ của Python hoặc 08 trong Python 3.x. 08 là phương pháp ưa thích để sử dụng nếu bạn cũng muốn lấy các thuộc tính tệp và thư mục như kích thước tệp và ngày sửa đổi.Danh sách thư mục trong các phiên bản Python kế thừaTrong các phiên bản của Python trước Python 3, 07 là phương pháp để sử dụng để có được một danh sách thư mục:>>>
07 Trả về danh sách Python chứa tên của các tệp và thư mục con trong thư mục được đưa ra bởi đối số đường dẫn:>>>
>>>
>>> import os >>> entries = os.listdir('my_directory/') 07 Trả về danh sách Python chứa tên của các tệp và thư mục con trong thư mục được đưa ra bởi đối số đường dẫn:Một danh sách thư mục như thế không dễ đọc. In đầu ra của cuộc gọi đến 07 bằng cách sử dụng vòng lặp giúp làm sạch mọi thứ:>>>
07 Trả về danh sách Python chứa tên của các tệp và thư mục con trong thư mục được đưa ra bởi đối số đường dẫn:
Một danh sách thư mục như thế không dễ đọc. In đầu ra của cuộc gọi đến 07 bằng cách sử dụng vòng lặp giúp làm sạch mọi thứ:
Danh sách thư mục trong các phiên bản Python hiện đại Trong các phiên bản hiện đại của Python, một giải pháp thay thế cho 07 là sử dụng 08 và 15. 08 đã được giới thiệu trong Python 3.5 và được ghi lại trong PEP 471. 08 trả về một trình lặp lại trái ngược với danh sách khi được gọi là: 18 chỉ vào tất cả các mục trong thư mục hiện tại. Bạn có thể lặp qua nội dung của trình lặp và in ra tên tệp:Chạy mã ở trên tạo ra những điều sau:
Sử dụng 15 hoặc 08 thay vì 07 là cách ưa thích để nhận danh sách thư mục, đặc biệt là khi bạn làm việc với mã cần loại tệp và thông tin thuộc tính tệp. 15 cung cấp nhiều chức năng xử lý tệp và đường dẫn được tìm thấy trong 5 và 7, và các phương thức của nó hiệu quả hơn một số phương thức được tìm thấy trong các mô -đun này. Chúng tôi sẽ thảo luận về cách lấy thuộc tính tệp trong thời gian ngắn.Dưới đây là các chức năng liệt kê thư mục một lần nữa:
47Các chức năng này trả về một danh sách mọi thứ trong thư mục, bao gồm cả thư mục con. Đây có thể không phải lúc nào cũng là hành vi bạn muốn. Phần tiếp theo sẽ chỉ cho bạn cách lọc kết quả từ danh sách thư mục.Liệt kê tất cả các tệp trong một thư mục 1Phần này sẽ chỉ cho bạn cách in tên của các tệp trong thư mục bằng cách sử dụng 07, 08 và 15. Để lọc các thư mục và chỉ liệt kê các tệp từ danh sách thư mục được tạo bởi 07, hãy sử dụng 6: 2Tại đây, cuộc gọi đến 07 trả về danh sách mọi thứ trong đường dẫn được chỉ định và sau đó danh sách đó được lọc bởi 54 để chỉ in ra các tệp và không phải thư mục. Điều này tạo ra đầu ra sau: 3Cách dễ dàng hơn để liệt kê các tệp trong thư mục là sử dụng 08 hoặc 15: 2Sử dụng 08 có lợi thế là trông sạch hơn và dễ hiểu hơn là sử dụng 07, mặc dù nó là một dòng mã dài hơn. Gọi 59 trên mỗi mục trong 18 trả về 61 nếu đối tượng là một tệp. In tên của tất cả các tệp trong thư mục cung cấp cho bạn đầu ra sau:Tại đây, cách liệt kê các tệp trong một thư mục bằng cách sử dụng 15: 5 2Tại đây, bạn gọi 63 trên mỗi mục được mang lại bởi 28. Đầu ra được tạo ra là như nhau:Mã trên có thể được thực hiện súc tích hơn nếu bạn kết hợp vòng lặp 65 và câu lệnh 66 thành một biểu thức trình tạo duy nhất. Dan Bader có một bài viết tuyệt vời về biểu thức máy phát và danh sách toàn diện. 7Phiên bản sửa đổi trông như thế này: Điều này tạo ra chính xác đầu ra giống như ví dụ trước nó. Phần này cho thấy rằng việc lọc các tệp hoặc thư mục sử dụng with open('data.txt', 'w') as f: data = 'some data to be written to the file' f.write(data) 08 và with open('data.txt', 'w') as f: data = 'some data to be written to the file' f.write(data) 15 cảm thấy trực quan hơn và trông sạch hơn so với việc sử dụng with open('data.txt', 'w') as f: data = 'some data to be written to the file' f.write(data) 07 kết hợp với from pathlib import Path entries = Path('my_directory/') for entry in entries.iterdir(): print(entry.name) 6.Liệt kê các thư mục con 8Để liệt kê các thư mục con thay vì các tệp, hãy sử dụng một trong các phương thức dưới đây. Tại đây, cách sử dụng 07 và 72: 9Thao tác với các đường dẫn hệ thống tập tin theo cách này có thể nhanh chóng trở nên cồng kềnh khi bạn có nhiều cuộc gọi đến 73. Chạy cái này trên máy tính của tôi tạo ra đầu ra sau: 0Đây là cách sử dụng 08: 9Như trong ví dụ liệt kê tệp, ở đây bạn gọi 75 trên mỗi mục được trả về bởi 08. Nếu mục nhập là một thư mục, 75 trả về 61 và tên thư mục được in ra. Đầu ra giống như trên: 2Đây là cách sử dụng 15: 9Gọi with open('data.txt', 'w') as f: data = 'some data to be written to the file' f.write(data) 75 trên mỗi mục nhập của trình lặp with open('data.txt', 'w') as f: data = 'some data to be written to the file' f.write(data) 81 kiểm tra xem một mục nhập là một tệp hoặc một thư mục. Nếu mục nhập là một thư mục, tên của nó được in ra màn hình và đầu ra được tạo ra giống như tên của ví dụ trước:Nhận thuộc tính tệp Python làm cho việc truy xuất các thuộc tính tệp như kích thước tệp và thời gian sửa đổi trở nên dễ dàng. Điều này được thực hiện thông qua 82, 08 hoặc 15. 08 và 15 Lấy một danh sách thư mục với các thuộc tính tệp được kết hợp. Điều này có thể có khả năng hiệu quả hơn so với sử dụng 07 để liệt kê các tệp và sau đó nhận thông tin thuộc tính tệp cho mỗi tệp.Các ví dụ dưới đây cho thấy làm thế nào để có được thời gian các tệp trong 4>>> 08 Trả về một đối tượng 18. Mỗi mục trong một đối tượng 18 có phương thức 92 lấy thông tin về tệp hoặc thư mục mà nó trỏ đến. 92 cung cấp thông tin như kích thước tệp và thời gian sửa đổi cuối cùng. Trong ví dụ trên, mã in ra thuộc tính 94, đó là thời gian nội dung của tệp được sửa đổi lần cuối.
>>> 5Trong ví dụ trên, mã các vòng lặp qua đối tượng được trả về bởi 28 và truy xuất các thuộc tính tệp thông qua lệnh gọi 92 cho mỗi tệp trong danh sách thư mục. Thuộc tính 94 trả về giá trị nổi đại diện cho giây kể từ kỷ nguyên. Để chuyển đổi các giá trị được trả về bởi 94 cho mục đích hiển thị, bạn có thể viết hàm trợ giúp để chuyển đổi các giây thành đối tượng 00: 6Điều này trước tiên sẽ nhận được một danh sách các tệp trong 05 và các thuộc tính của chúng và sau đó gọi 02 để chuyển đổi từng tệp thời gian sửa đổi lần cuối thành một dạng đọc được. 02 Sử dụng 04 để chuyển đổi thời gian tính bằng giây thành một chuỗi.Các đối số được chuyển đến 04 như sau:
Cùng nhau, các chỉ thị này tạo ra đầu ra trông như thế này: >>> 7Cú pháp để chuyển đổi ngày và thời gian thành chuỗi có thể khá khó hiểu. Để đọc thêm về nó, hãy xem tài liệu chính thức về nó. Một tài liệu tham khảo tiện dụng khác dễ nhớ là http://strftime.org/. Làm thư mụcSớm hay muộn, các chương trình bạn viết sẽ phải tạo các thư mục để lưu trữ dữ liệu trong đó. 5 và 8 bao gồm các chức năng để tạo thư mục. Chúng tôi sẽ xem xét những điều này:
Tạo một thư mục duy nhấtĐể tạo một thư mục duy nhất, hãy chuyển một đường dẫn đến thư mục dưới dạng tham số đến 11: 8Nếu một thư mục đã tồn tại, 11 tăng 16. Ngoài ra, bạn có thể tạo một thư mục bằng cách sử dụng 8: 9Nếu đường dẫn đã tồn tại, 18 sẽ tăng 16:>>> 0Để tránh các lỗi như thế này, hãy bắt lỗi khi nó xảy ra và cho người dùng của bạn biết: 1Ngoài ra, bạn có thể bỏ qua 16 bằng cách chuyển đối số 21 cho 22: 2Điều này sẽ không gây ra lỗi nếu thư mục đã tồn tại. Tạo nhiều thư mục 13 tương tự như 11. Sự khác biệt giữa hai là không chỉ 13 tạo ra các thư mục riêng lẻ, mà còn có thể được sử dụng để tạo ra các cây thư mục. Nói cách khác, nó có thể tạo ra bất kỳ thư mục trung gian cần thiết nào để đảm bảo một đường dẫn đầy đủ tồn tại. 13 tương tự như chạy 27 trong bash. Ví dụ: để tạo một nhóm các thư mục như 28, tất cả những gì bạn phải làm là như sau: 3Điều này sẽ tạo ra một cấu trúc thư mục lồng nhau chứa các thư mục 2018, 10 và 05: 4 29 tạo ra các thư mục với quyền mặc định. Nếu bạn cần tạo các thư mục với các quyền khác nhau, hãy gọi 29 và vượt qua trong chế độ, bạn muốn các thư mục được tạo trong: 5Điều này tạo ra cấu trúc thư mục 28 và cung cấp cho chủ sở hữu và người dùng nhóm đọc, viết và thực hiện các quyền. Chế độ mặc định là 32 và các bit cho phép tệp của các thư mục mẹ hiện tại không được thay đổi. Để biết thêm chi tiết về quyền tệp và cách áp dụng chế độ, hãy xem tài liệu.Chạy 33 để xác nhận rằng các quyền phù hợp đã được áp dụng:
6Điều này in ra một cây thư mục của thư mục hiện tại. 33 thường được sử dụng để liệt kê nội dung của các thư mục theo định dạng giống như cây. Truyền các đối số 35 và 36 cho nó in ra tên thư mục và thông tin quyền tệp của họ trong một danh sách dọc. 35 in ra các quyền của tệp và 36 tạo ra 33 tạo ra một danh sách thẳng đứng mà không có các dòng thụt.Như bạn có thể thấy, tất cả các thư mục đều có quyền 40. Một cách khác để tạo các thư mục là sử dụng 22 từ 42: 7Chuyển 43 đến 44 khiến nó tạo ra thư mục 45 và bất kỳ thư mục phụ huynh nào cần thiết để làm cho đường dẫn hợp lệ.Theo mặc định, 13 và 44 tăng 48 nếu thư mục đích đã tồn tại. Hành vi này có thể được ghi đè (kể từ Python 3.2) bằng cách truyền 21 làm đối số từ khóa khi gọi mỗi hàm.Chạy mã ở trên tạo ra cấu trúc thư mục như dưới đây trong một lần: 4Tôi thích sử dụng 8 khi tạo thư mục vì tôi có thể sử dụng cùng một chức năng để tạo các thư mục đơn hoặc lồng nhau.Kết hợp mẫu tệpSau khi nhận được danh sách các tệp trong một thư mục bằng một trong các phương thức ở trên, rất có thể bạn sẽ muốn tìm kiếm các tệp phù hợp với một mẫu cụ thể. Đây là các phương pháp và chức năng có sẵn cho bạn:
Mỗi cái được thảo luận dưới đây. Các ví dụ trong phần này sẽ được thực hiện trên một thư mục gọi là 56 có cấu trúc sau: 9Nếu bạn theo dõi bằng cách sử dụng Bash Shell, bạn có thể tạo cấu trúc thư mục trên bằng các lệnh sau: 0Điều này sẽ tạo thư mục 57, thay đổi vào nó và sau đó tạo 58. Dòng tiếp theo tạo ra 59 và 60 trong 58 và dòng cuối cùng tạo ra tất cả các tệp khác bằng cách sử dụng mở rộng. Để tìm hiểu thêm về mở rộng Shell, hãy truy cập trang web này.Sử dụng các phương thức chuỗiPython có một số phương pháp tích hợp để sửa đổi và thao tác các chuỗi. Hai trong số các phương pháp này, 62 và 63, rất hữu ích khi bạn đang tìm kiếm các mẫu trong tên tệp. Để làm điều này, trước tiên hãy lấy một danh sách thư mục và sau đó lặp lại nó:>>> 1Mã ở trên tìm thấy tất cả các tệp trong 57, lặp lại chúng và sử dụng 63 để in ra các tên tệp có phần mở rộng tệp 66. Chạy cái này trên máy tính của tôi tạo ra đầu ra sau: 2Kết hợp mẫu tệp đơn giản bằng cách sử dụng my_directory/ | ├── sub_dir/ | ├── bar.py | └── foo.py | ├── sub_dir_b/ | └── file4.txt | ├── sub_dir_c/ | ├── config.py | └── file5.txt | ├── file1.py ├── file2.csv └── file3.txt 67Phương pháp chuỗi bị giới hạn trong khả năng phù hợp của chúng. 67 có các chức năng và phương pháp nâng cao hơn để khớp mẫu. Chúng tôi sẽ xem xét 53, một chức năng hỗ trợ việc sử dụng các ký tự đại diện như 70 và 71 để khớp với tên tệp. Ví dụ: để tìm tất cả các tệp 66 trong một thư mục bằng cách sử dụng 67, bạn sẽ thực hiện như sau:>>> 3Mã ở trên tìm thấy tất cả các tệp trong 57, lặp lại chúng và sử dụng 63 để in ra các tên tệp có phần mở rộng tệp 66. Chạy cái này trên máy tính của tôi tạo ra đầu ra sau:Kết hợp mẫu tệp đơn giản bằng cách sử dụng my_directory/ | ├── sub_dir/ | ├── bar.py | └── foo.py | ├── sub_dir_b/ | └── file4.txt | ├── sub_dir_c/ | ├── config.py | └── file5.txt | ├── file1.py ├── file2.csv └── file3.txt 67Phương pháp chuỗi bị giới hạn trong khả năng phù hợp của chúng. 67 có các chức năng và phương pháp nâng cao hơn để khớp mẫu. Chúng tôi sẽ xem xét 53, một chức năng hỗ trợ việc sử dụng các ký tự đại diện như 70 và 71 để khớp với tên tệp. Ví dụ: để tìm tất cả các tệp 66 trong một thư mục bằng cách sử dụng 67, bạn sẽ thực hiện như sau:Điều này lặp lại trong danh sách các tệp trong 56 và sử dụng 75 để thực hiện tìm kiếm ký tự đại diện cho các tệp có phần mở rộng 66.>>> 4Mã ở trên tìm thấy tất cả các tệp trong 57, lặp lại chúng và sử dụng 63 để in ra các tên tệp có phần mở rộng tệp 66. Chạy cái này trên máy tính của tôi tạo ra đầu ra sau: 5Kết hợp mẫu tệp đơn giản bằng cách sử dụng my_directory/ | ├── sub_dir/ | ├── bar.py | └── foo.py | ├── sub_dir_b/ | └── file4.txt | ├── sub_dir_c/ | ├── config.py | └── file5.txt | ├── file1.py ├── file2.csv └── file3.txt 67Phương pháp chuỗi bị giới hạn trong khả năng phù hợp của chúng. 67 có các chức năng và phương pháp nâng cao hơn để khớp mẫu. Chúng tôi sẽ xem xét 53, một chức năng hỗ trợ việc sử dụng các ký tự đại diện như 70 và 71 để khớp với tên tệp. Ví dụ: để tìm tất cả các tệp 66 trong một thư mục bằng cách sử dụng 67, bạn sẽ thực hiện như sau:Điều này lặp lại trong danh sách các tệp trong 56 và sử dụng 75 để thực hiện tìm kiếm ký tự đại diện cho các tệp có phần mở rộng 66.Kết hợp mẫu nâng cao hơn Hãy giả sử bạn muốn tìm các tệp 66 đáp ứng các tiêu chí nhất định. Ví dụ: bạn chỉ có thể quan tâm đến việc tìm các tệp 66 có chứa từ 79, một số giữa một tập hợp dấu gạch dưới và từ 80 trong tên tệp của họ. Một cái gì đó tương tự như 81, 82 hoặc 83.Sử dụng 53, bạn có thể làm theo cách này:>>> 6Mã ở trên tìm thấy tất cả các tệp trong 57, lặp lại chúng và sử dụng 63 để in ra các tên tệp có phần mở rộng tệp 66. Chạy cái này trên máy tính của tôi tạo ra đầu ra sau:>>> 7Mã ở trên tìm thấy tất cả các tệp trong 57, lặp lại chúng và sử dụng 63 để in ra các tên tệp có phần mở rộng tệp 66. Chạy cái này trên máy tính của tôi tạo ra đầu ra sau: 2Kết hợp mẫu tệp đơn giản bằng cách sử dụng 67>>> 9Mã ở trên tìm thấy tất cả các tệp trong 57, lặp lại chúng và sử dụng 63 để in ra các tên tệp có phần mở rộng tệp 66. Chạy cái này trên máy tính của tôi tạo ra đầu ra sau:Kết hợp mẫu tệp đơn giản bằng cách sử dụng 67 0Phương pháp chuỗi bị giới hạn trong khả năng phù hợp của chúng. 67 có các chức năng và phương pháp nâng cao hơn để khớp mẫu. Chúng tôi sẽ xem xét 53, một chức năng hỗ trợ việc sử dụng các ký tự đại diện như 70 và 71 để khớp với tên tệp. Ví dụ: để tìm tất cả các tệp 66 trong một thư mục bằng cách sử dụng 67, bạn sẽ thực hiện như sau:>>> 1Mã ở trên tìm thấy tất cả các tệp trong 57, lặp lại chúng và sử dụng 63 để in ra các tên tệp có phần mở rộng tệp 66. Chạy cái này trên máy tính của tôi tạo ra đầu ra sau: 24 tương tự như 25 đã thảo luận ở trên. Như bạn có thể thấy, 8 kết hợp nhiều tính năng tốt nhất của các mô -đun 5, 6 và 88 thành một mô -đun duy nhất, điều này làm cho nó rất vui khi sử dụng.Tóm lại, đây là một bảng các chức năng mà chúng tôi đã đề cập trong phần này:
Trải qua các thư mục và xử lý các tệpMột nhiệm vụ lập trình phổ biến là đi bộ một cây thư mục và xử lý các tệp trong cây. Hãy để khám phá cách chức năng Python tích hợp 41 có thể được sử dụng để làm điều này. 41 được sử dụng để tạo tên tệp trong cây thư mục bằng cách đi bộ trên cây từ trên xuống hoặc từ dưới lên. Đối với mục đích của phần này, chúng tôi sẽ thao túng cây thư mục sau: 2Sau đây là một ví dụ cho bạn biết cách liệt kê tất cả các tệp và thư mục trong cây thư mục bằng cách sử dụng 41. 41 Mặc định vượt qua các thư mục theo cách từ trên xuống: 3 41 Trả về ba giá trị trên mỗi lần lặp của vòng lặp:
Trên mỗi lần lặp, nó in tên của các thư mục con và tệp mà nó tìm thấy: 4Để vượt qua cây thư mục theo cách từ dưới lên, hãy chuyển trong đối số từ khóa 46 sang 41: 5Vượt qua đối số 46 sẽ tạo ra 41 in ra các tệp mà nó tìm thấy trong các thư mục con đầu tiên:
6Như bạn có thể thấy, chương trình bắt đầu bằng cách liệt kê nội dung của các thư mục con trước khi liệt kê nội dung của thư mục gốc. Điều này rất hữu ích trong các tình huống mà bạn muốn xóa các tệp và thư mục đệ quy. Bạn sẽ học cách làm điều này trong các phần dưới đây. Theo mặc định, 50 không bước xuống các liên kết tượng trưng để giải quyết cho các thư mục. Hành vi này có thể được ghi đè bằng cách gọi nó bằng đối số 51.Tạo các tập tin và thư mục tạm thờiPython cung cấp một mô -đun tiện dụng để tạo các tệp và thư mục tạm thời được gọi là 52. 52 có thể được sử dụng để mở và lưu trữ dữ liệu tạm thời trong một tệp hoặc thư mục trong khi chương trình của bạn đang chạy. 52 xử lý việc xóa các tệp tạm thời khi chương trình của bạn được thực hiện với chúng.Tại đây, cách tạo một tệp tạm thời: 7Bước đầu tiên là nhập 55 từ mô -đun 52. Tiếp theo, tạo một tệp như đối tượng bằng phương thức 57 bằng cách gọi nó và chuyển chế độ bạn muốn mở tệp. Điều này sẽ tạo và mở một tệp có thể được sử dụng làm khu vực lưu trữ tạm thời.Trong ví dụ trên, chế độ là 58, tạo ra 52 tạo một tệp văn bản tạm thời ở chế độ ghi. Không cần phải cung cấp cho tệp tạm thời một tên tệp vì nó sẽ bị phá hủy sau khi tập lệnh được thực hiện.Sau khi ghi vào tệp, bạn có thể đọc từ nó và đóng nó khi bạn xử lý xong. Khi tệp được đóng, nó sẽ bị xóa khỏi hệ thống tập tin. Nếu bạn cần đặt tên cho các tệp tạm thời được tạo bằng 52, hãy sử dụng 61.Các tệp và thư mục tạm thời được tạo bằng 52 được lưu trữ trong thư mục hệ thống đặc biệt để lưu trữ các tệp tạm thời. Python tìm kiếm một danh sách tiêu chuẩn các thư mục để tìm một danh sách mà người dùng có thể tạo tệp.Trên Windows, các thư mục là 63, 64, 65 và 66, theo thứ tự đó. Trên tất cả các nền tảng khác, các thư mục là 67, 68 và 69, theo thứ tự đó. Là phương sách cuối cùng, 52 sẽ lưu các tệp và thư mục tạm thời trong thư mục hiện tại. 71 cũng là người quản lý bối cảnh để nó có thể được sử dụng cùng với câu lệnh 20. Sử dụng Trình quản lý bối cảnh, hãy tự động xóa và xóa tệp sau khi nó được đọc: 8Điều này tạo ra một tệp tạm thời và đọc dữ liệu từ nó. Ngay sau khi đọc nội dung của tệp, tệp tạm thời được đóng và xóa khỏi hệ thống tệp. 52 cũng có thể được sử dụng để tạo các thư mục tạm thời. Hãy cùng nhìn vào cách bạn có thể làm điều này bằng cách sử dụng 74:>>> 9Gọi 74 Tạo một thư mục tạm thời trong hệ thống tệp và trả về một đối tượng đại diện cho thư mục này. Trong ví dụ trên, thư mục được tạo bằng trình quản lý ngữ cảnh và tên của thư mục được lưu trữ trong 76. Dòng thứ ba in ra tên của thư mục tạm thời và 77 có xác nhận nếu thư mục thực sự được tạo trong hệ thống tệp.Sau khi người quản lý bối cảnh đi ra khỏi ngữ cảnh, thư mục tạm thời sẽ bị xóa và cuộc gọi đến 77 trả về 32, điều đó có nghĩa là thư mục đã bị xóa một cách hoàn hảo.Xóa các tệp và thư mụcBạn có thể xóa các tệp, thư mục và toàn bộ các cây thư mục bằng các phương thức được tìm thấy trong các mô -đun 5, 7 và 8. Các phần sau đây mô tả cách xóa các tệp và thư mục mà bạn không còn cần.Xóa các tệp trong PythonĐể xóa một tệp duy nhất, hãy sử dụng 83, 84. hoặc 85. 84 và 85 giống hệt nhau về mặt ngữ nghĩa. Để xóa một tệp bằng cách sử dụng 84, hãy làm như sau: 0Xóa tệp bằng cách sử dụng 85 tương tự như cách bạn thực hiện bằng cách sử dụng 84: 1Gọi 91 hoặc 92 trên một tệp xóa tệp khỏi hệ thống tập tin. Hai chức năng này sẽ ném 48 nếu đường dẫn được truyền cho chúng chỉ vào một thư mục thay vì một tệp. Để tránh điều này, bạn có thể kiểm tra xem những gì bạn đang cố gắng xóa có thực sự là một tệp không và chỉ xóa nó nếu có, hoặc bạn có thể sử dụng xử lý ngoại lệ để xử lý 48: 2 54 Kiểm tra xem 96 có thực sự là một tệp hay không. Nếu có, nó sẽ bị xóa bởi cuộc gọi đến 84. Nếu 96 trỏ vào một thư mục, một thông báo lỗi được in vào bảng điều khiển.Ví dụ sau đây cho thấy cách sử dụng xử lý ngoại lệ để xử lý các lỗi khi xóa các tệp: 3Mã trên cố gắng xóa tệp trước khi kiểm tra loại của nó. Nếu 96 thực sự là một tệp, thì 48 được ném được xử lý trong mệnh đề 01 và thông báo lỗi được in vào bảng điều khiển. Thông báo lỗi được in ra được định dạng bằng các chuỗi Python F.Cuối cùng, bạn cũng có thể sử dụng 83 để xóa các tệp: 4Điều này tạo ra một đối tượng 24 được gọi là 96 trỏ đến một tệp. Gọi 92 trên 96 sẽ xóa 07. Nếu 96 trỏ vào một thư mục, một 09 sẽ được nâng lên. Điều đáng chú ý là chương trình Python ở trên có các quyền tương tự như người dùng đang chạy nó. Nếu người dùng không có quyền xóa tệp, 10 sẽ được nâng lên.Xóa thư mụcThư viện tiêu chuẩn cung cấp các chức năng sau để xóa các thư mục:
Để xóa một thư mục hoặc thư mục duy nhất, hãy sử dụng 11 hoặc 15. Hai chức năng này chỉ hoạt động nếu thư mục mà bạn đang cố gắng xóa là trống. Nếu thư mục không trống, một 48 sẽ được nâng lên. Đây là cách xóa một thư mục: 5Ở đây, thư mục 17 bị xóa bằng cách chuyển đường dẫn của nó đến 11. Nếu thư mục không trống, một thông báo lỗi được in lên màn hình:>>> 6Ngoài ra, bạn có thể sử dụng 8 để xóa các thư mục: 7Ở đây, bạn tạo một đối tượng 24 trỏ đến thư mục sẽ bị xóa. Gọi 21 trên đối tượng 24 sẽ xóa nó nếu nó trống.Xóa toàn bộ cây thư mụcĐể xóa các thư mục không trống và toàn bộ cây thư mục, Python cung cấp 13: 8Mọi thứ trong 17 đều bị xóa khi 13 được gọi trên nó. Có thể có những trường hợp bạn muốn xóa các thư mục trống một cách đệ quy. Bạn có thể làm điều này bằng cách sử dụng một trong các phương thức được thảo luận ở trên kết hợp với 41: 9Điều này đi xuống cây thư mục và cố gắng xóa từng thư mục mà nó tìm thấy. Nếu thư mục không trống, một 48 sẽ được nâng lên và thư mục đó bị bỏ qua. Bảng dưới đây liệt kê các chức năng được đề cập trong phần này:
Xóa toàn bộ cây thư mục và có thể được sử dụng để xóa các thư mục không trốngSao chép, di chuyển và đổi tên các tập tin và thư mục Tàu Python với mô -đun from pathlib import Path entries = Path('my_directory/') for entry in entries.iterdir(): print(entry.name) 7. from pathlib import Path entries = Path('my_directory/') for entry in entries.iterdir(): print(entry.name) 7 là viết tắt của các tiện ích vỏ. Nó cung cấp một số hoạt động cấp cao trên các tệp để hỗ trợ sao chép, lưu trữ và xóa các tệp và thư mục. Trong phần này, bạn sẽ học cách di chuyển và sao chép các tệp và thư mục.Sao chép các tệp trong Python 0 7 cung cấp một vài chức năng để sao chép tệp. Các hàm được sử dụng phổ biến nhất là 38 và 39. Để sao chép tệp từ vị trí này sang vị trí khác bằng cách sử dụng 38, hãy làm như sau:Để bảo tồn tất cả các siêu dữ liệu tệp khi sao chép, hãy sử dụng 39: 1Sử dụng 52 Bảo tồn chi tiết về tệp như thời gian truy cập cuối cùng, bit quyền, thời gian sửa đổi cuối cùng và cờ.Sao chép thư mụcMặc dù 38 chỉ sao chép một tệp duy nhất, 54 sẽ sao chép toàn bộ thư mục và mọi thứ có trong đó. 55 có hai đối số: thư mục nguồn và thư mục đích trong đó các tệp và thư mục sẽ được sao chép.Ở đây, một ví dụ về cách sao chép nội dung của một thư mục vào một địa điểm khác: >>> 2Trong ví dụ này, 56 sao chép nội dung của 57 đến một vị trí mới 58 và trả về thư mục đích. Thư mục đích không được tồn tại. Nó sẽ được tạo ra cũng như thiếu các thư mục phụ huynh. 54 là một cách tốt để sao lưu các tệp của bạn.Di chuyển các tập tin và thư mụcĐể di chuyển một tệp hoặc thư mục đến một vị trí khác, hãy sử dụng 60. 44 là tệp hoặc thư mục sẽ được di chuyển và 45 là đích đến:>>> 3Trong ví dụ này, 56 sao chép nội dung của 57 đến một vị trí mới 58 và trả về thư mục đích. Thư mục đích không được tồn tại. Nó sẽ được tạo ra cũng như thiếu các thư mục phụ huynh. 54 là một cách tốt để sao lưu các tệp của bạn.Di chuyển các tập tin và thư mụcĐể di chuyển một tệp hoặc thư mục đến một vị trí khác, hãy sử dụng 60.>>> 4Trong ví dụ này, 56 sao chép nội dung của 57 đến một vị trí mới 58 và trả về thư mục đích. Thư mục đích không được tồn tại. Nó sẽ được tạo ra cũng như thiếu các thư mục phụ huynh. 54 là một cách tốt để sao lưu các tệp của bạn.Di chuyển các tập tin và thư mục >>> 5Trong ví dụ này, 56 sao chép nội dung của 57 đến một vị trí mới 58 và trả về thư mục đích. Thư mục đích không được tồn tại. Nó sẽ được tạo ra cũng như thiếu các thư mục phụ huynh. 54 là một cách tốt để sao lưu các tệp của bạn.Di chuyển các tập tin và thư mụcĐể di chuyển một tệp hoặc thư mục đến một vị trí khác, hãy sử dụng 60.>>> os.listdir('my_directory/') ['sub_dir_c', 'file1.py', 'sub_dir_b', 'file3.txt', 'file2.csv', 'sub_dir'] 44 là tệp hoặc thư mục sẽ được di chuyển và >>> os.listdir('my_directory/') ['sub_dir_c', 'file1.py', 'sub_dir_b', 'file3.txt', 'file2.csv', 'sub_dir'] 45 là đích đến: 63 di chuyển 64 vào 65 nếu 65 tồn tại. Nếu 65 không tồn tại, 64 sẽ được đổi tên thành 80. 6Đổi tên các tập tin và thư mục 7Python bao gồm 70 để đổi tên các tệp và thư mục: 8Dòng trên sẽ đổi tên 71 thành 72. Nếu đường dẫn đích trỏ đến một thư mục, nó sẽ tăng 48. 9Một cách khác để đổi tên các tệp hoặc thư mục là sử dụng 74 từ mô -đun 8: 0Để đổi tên các tệp bằng 8, trước tiên bạn tạo một đối tượng 15 chứa đường dẫn đến tệp bạn muốn thay thế. Bước tiếp theo là gọi 74 trên đối tượng đường dẫn và chuyển tên tệp mới cho tệp hoặc thư mục mà bạn đang đổi tên.Lưu trữ Lưu trữ là một cách thuận tiện để đóng gói một số tệp thành một. Hai loại lưu trữ phổ biến nhất là zip và tar. Các chương trình Python bạn viết có thể tạo, đọc và trích xuất dữ liệu từ Lưu trữ. Bạn sẽ học cách đọc và ghi vào cả hai định dạng lưu trữ trong phần này. >>> 1Trong ví dụ này, 56 sao chép nội dung của 57 đến một vị trí mới 58 và trả về thư mục đích. Thư mục đích không được tồn tại. Nó sẽ được tạo ra cũng như thiếu các thư mục phụ huynh. 54 là một cách tốt để sao lưu các tệp của bạn.Di chuyển các tập tin và thư mục Để di chuyển một tệp hoặc thư mục đến một vị trí khác, hãy sử dụng 60.>>> os.listdir('my_directory/') ['sub_dir_c', 'file1.py', 'sub_dir_b', 'file3.txt', 'file2.csv', 'sub_dir'] 44 là tệp hoặc thư mục sẽ được di chuyển và >>> os.listdir('my_directory/') ['sub_dir_c', 'file1.py', 'sub_dir_b', 'file3.txt', 'file2.csv', 'sub_dir'] 45 là đích đến: 63 di chuyển 64 vào 65 nếu 65 tồn tại. Nếu 65 không tồn tại, 64 sẽ được đổi tên thành 80.>>> 2Trong ví dụ, 10 được mở ở chế độ ghi và mỗi tệp trong 11 được thêm vào kho lưu trữ. Khi bộ tuyên bố 20 kết thúc, 10 bị đóng. Mở một tệp zip trong chế độ ghi xóa nội dung của kho lưu trữ và tạo một kho lưu trữ mới.Để thêm các tệp vào kho lưu trữ hiện có, hãy mở đối tượng 81 ở chế độ phụ lục và sau đó thêm các tệp:>>> 3Tại đây, bạn mở kho lưu trữ 15 mà bạn đã tạo trong ví dụ trước trong chế độ nối. Mở đối tượng 81 ở chế độ Phụ lục cho phép bạn thêm các tệp mới vào tệp zip mà không cần xóa nội dung hiện tại của nó. Sau khi thêm các tệp vào tệp zip, câu lệnh 20 đi ra khỏi ngữ cảnh và đóng tệp zip.Mở tài liệu lưu trữ tarCác tập tin TAR là tài liệu lưu trữ tệp không nén như ZIP. Chúng có thể được nén bằng các phương pháp nén GZIP, BZIP2 và LZMA. Lớp 18 cho phép đọc và viết tài liệu lưu trữ tar.Làm điều này để đọc từ một kho lưu trữ: 4 19 Các đối tượng mở như hầu hết các đối tượng giống như tệp. Chúng có chức năng 00 có chế độ xác định cách mở tệp.Sử dụng các chế độ 21, 22 hoặc 23 để mở một tệp TAR không nén để đọc, viết và nối thêm. Để mở các tệp TAR được nén, chuyển trong một đối số chế độ sang 24 ở dạng 25. Bảng dưới đây liệt kê các tệp TAR có thể có thể được mở trong:
34 Mặc định cho chế độ 21. Để đọc một tệp TAR không nén và truy xuất tên của các tệp trong đó, hãy sử dụng 36:>>> 5Điều này trả về một danh sách với tên của nội dung lưu trữ. Siêu dữ liệu của mỗi mục trong kho lưu trữ có thể được truy cập bằng các thuộc tính đặc biệt: >>> 6
Trong ví dụ này, bạn lặp qua danh sách các tệp được trả về bởi 37 và in ra từng thuộc tính của tệp. Các đối tượng được trả về bởi 37 có các thuộc tính có thể được truy cập theo chương trình như tên, kích thước và thời gian sửa đổi cuối cùng của mỗi tệp trong kho lưu trữ. Sau khi đọc hoặc viết vào kho lưu trữ, nó phải được đóng để giải phóng các tài nguyên hệ thống.Tạo tài liệu lưu trữ tar mớiĐây là cách bạn làm điều đó: >>> 7Đầu tiên, bạn lập một danh sách các tệp được thêm vào kho lưu trữ để bạn không phải thêm từng tệp theo cách thủ công. Dòng tiếp theo sử dụng trình quản lý bối cảnh 20 để mở một kho lưu trữ mới có tên 40 ở chế độ ghi. Mở một kho lưu trữ trong chế độ ghi (________ 522) cho phép bạn viết các tệp mới vào kho lưu trữ. Bất kỳ tệp hiện có trong kho lưu trữ đều bị xóa và một kho lưu trữ mới được tạo.Sau khi kho lưu trữ được tạo và điền, trình quản lý bối cảnh 20 tự động đóng nó và lưu nó vào hệ thống tập tin. Ba dòng cuối cùng mở kho lưu trữ bạn vừa tạo và in ra tên của các tệp có trong đó.Để thêm các tệp mới vào kho lưu trữ hiện có, hãy mở kho lưu trữ ở chế độ phụ trợ ( 23):>>> 8Mở một kho lưu trữ ở chế độ phụ lục cho phép bạn thêm các tệp mới vào nó mà không cần xóa các tệp đã có trong đó. Làm việc với tài liệu lưu trữ nén 19 cũng có thể đọc và viết tài liệu lưu trữ tar được nén bằng cách sử dụng nén GZIP, BZIP2 và LZMA. Để đọc hoặc ghi vào kho lưu trữ nén, sử dụng 24, chuyển ở chế độ thích hợp cho loại nén.Ví dụ: để đọc hoặc ghi dữ liệu vào kho lưu trữ TAR được nén bằng GZIP, sử dụng chế độ 46 hoặc 47 tương ứng:>>> 9Chế độ 47 mở kho lưu trữ cho văn bản nén GZIP và 46 mở kho lưu trữ để đọc nén GZIP. Mở tài liệu lưu trữ nén trong chế độ nối là không thể. Để thêm các tệp vào kho lưu trữ nén, bạn phải tạo một kho lưu trữ mới.Một cách dễ dàng hơn để tạo tài liệu lưu trữThư viện tiêu chuẩn Python cũng hỗ trợ tạo tài liệu lưu trữ TAR và ZIP bằng các phương thức cấp cao trong mô-đun 7. Các tiện ích lưu trữ trong 7 cho phép bạn tạo, đọc và trích xuất tài liệu lưu trữ zip và tar. Các tiện ích này dựa vào các mô -đun cấp thấp hơn 19 và 79.Làm việc với tài liệu lưu trữ bằng cách sử dụng 54 mất ít nhất hai đối số: tên của kho lưu trữ và định dạng lưu trữ.Theo mặc định, nó nén tất cả các tệp trong thư mục hiện tại vào định dạng lưu trữ được chỉ định trong đối số 56. Bạn có thể chuyển trong một đối số 57 tùy chọn để nén các tệp trong một thư mục khác. 58 hỗ trợ 59, 60, 61 và 62 Định dạng lưu trữ.Đây là cách tạo lưu trữ TAR bằng cách sử dụng 7: 0Điều này sao chép mọi thứ trong 64 và tạo một kho lưu trữ có tên 65 trong hệ thống tập tin và trả về tên của nó. Để trích xuất kho lưu trữ, hãy gọi 66: 1Gọi 66 và chuyển trong một tên lưu trữ và thư mục đích trích xuất nội dung của 65 vào 69. Lưu trữ ZIP có thể được tạo và trích xuất theo cùng một cách.Đọc nhiều tập tinPython hỗ trợ đọc dữ liệu từ nhiều luồng đầu vào hoặc từ danh sách các tệp thông qua mô -đun 9. Mô -đun này cho phép bạn lặp lại nội dung của một hoặc nhiều tệp văn bản một cách nhanh chóng và dễ dàng. Ở đây, cách thức điển hình 9 được sử dụng: 2 9 nhận được đầu vào của nó từ các đối số dòng lệnh được chuyển đến 73 theo mặc định.Sử dụng Hãy để sử dụng 9 để xây dựng một phiên bản thô của tiện ích Unix chung 76. Tiện ích 76 đọc các tệp theo tuần tự, ghi chúng vào đầu ra tiêu chuẩn. Khi được đưa ra nhiều hơn một tệp trong các đối số dòng lệnh của nó, 76 sẽ kết hợp các tệp văn bản và hiển thị kết quả trong thiết bị đầu cuối: 3Chạy này trên hai tệp văn bản trong thư mục hiện tại của tôi tạo ra đầu ra sau: 4 9 cho phép bạn truy xuất thêm thông tin về từng dòng, chẳng hạn như liệu đó có phải là dòng đầu tiên ( 80), số dòng ( 81) và tên tệp ( 82). Bạn có thể đọc thêm về nó ở đây.Sự kết luậnBây giờ bạn đã biết cách sử dụng Python để thực hiện các hoạt động phổ biến nhất trên các tệp và nhóm tệp. Bạn đã học về các mô-đun tích hợp khác nhau được sử dụng để đọc, tìm và thao tác chúng. Bây giờ bạn được trang bị để sử dụng Python để:
Xem bây giờ hướng dẫn này có một khóa học video liên quan được tạo bởi nhóm Python thực sự. Xem cùng với hướng dẫn bằng văn bản để hiểu sâu hơn về sự hiểu biết của bạn: Công thức nấu ăn thực tế để làm việc với các tệp trong Python This tutorial has a related video course created by the Real Python team. Watch it together with the written tutorial to deepen your understanding: Practical Recipes for Working With Files in Python |