Bạn gặp khó khăn với việc xử lý đường dẫn tệp trong Python? . 4 trở lên, cuộc đấu tranh đã kết thúc. Bạn không còn cần phải vò đầu bứt tai viết mã như >>> >>> path.rsplit('\\', maxsplit=1)[0]
Hoặc co rúm người lại trước sự dài dòng của >>> >>> os.path.isfile(os.path.join(os.path.expanduser('~'), 'realpython.txt'))
Trong hướng dẫn này, bạn sẽ thấy cách làm việc với đường dẫn tệp—tên của thư mục và tệp—trong Python. Bạn sẽ tìm hiểu những cách mới để đọc và ghi tệp, thao tác với đường dẫn và hệ thống tệp bên dưới, cũng như xem một số ví dụ về cách liệt kê tệp và lặp lại chúng. Sử dụng mô-đun import glob
import os
import shutil
for file_name in glob.glob('*.txt'):
new_path = os.path.join('archive', file_name)
shutil.move(file_name, new_path)
1, hai ví dụ trên có thể được viết lại bằng mã Pythonic thanh lịch, dễ đọc và như>>> >>> path.parent
>>> (pathlib.Path.home() / 'realpython.txt').is_file()
Tải xuống PDF miễn phí. Bảng cheat Python 3 Sự cố với xử lý đường dẫn tệp PythonLàm việc với tệp và tương tác với hệ thống tệp rất quan trọng vì nhiều lý do khác nhau. Các trường hợp đơn giản nhất có thể chỉ liên quan đến việc đọc hoặc ghi tệp, nhưng đôi khi có các tác vụ phức tạp hơn. Có thể bạn cần liệt kê tất cả các tệp trong một thư mục thuộc loại nhất định, tìm thư mục mẹ của một tệp nhất định hoặc tạo một tên tệp duy nhất chưa tồn tại Theo truyền thống, Python đã biểu diễn các đường dẫn tệp bằng các chuỗi văn bản thông thường. Với sự hỗ trợ từ thư viện chuẩn import glob
import os
import shutil
for file_name in glob.glob('*.txt'):
new_path = os.path.join('archive', file_name)
shutil.move(file_name, new_path)
2, điều này là đủ mặc dù hơi cồng kềnh (như ví dụ thứ hai trong phần giới thiệu cho thấy). Tuy nhiên, vì đường dẫn không phải là chuỗi nên chức năng quan trọng được lan truyền khắp thư viện tiêu chuẩn, bao gồm các thư viện như import glob
import os
import shutil
for file_name in glob.glob('*.txt'):
new_path = os.path.join('archive', file_name)
shutil.move(file_name, new_path)
3, import glob
import os
import shutil
for file_name in glob.glob('*.txt'):
new_path = os.path.join('archive', file_name)
shutil.move(file_name, new_path)
4 và import glob
import os
import shutil
for file_name in glob.glob('*.txt'):
new_path = os.path.join('archive', file_name)
shutil.move(file_name, new_path)
5. Ví dụ sau cần ba câu lệnh import glob
import os
import shutil
for file_name in glob.glob('*.txt'):
new_path = os.path.join('archive', file_name)
shutil.move(file_name, new_path)
6 chỉ để di chuyển tất cả tệp văn bản vào thư mục lưu trữimport glob
import os
import shutil
for file_name in glob.glob('*.txt'):
new_path = os.path.join('archive', file_name)
shutil.move(file_name, new_path)
Với các đường dẫn được biểu thị bằng các chuỗi, có thể, nhưng thường là một ý tưởng tồi, sử dụng các phương thức chuỗi thông thường. Chẳng hạn, thay vì nối hai đường dẫn với import glob
import os
import shutil
for file_name in glob.glob('*.txt'):
new_path = os.path.join('archive', file_name)
shutil.move(file_name, new_path)
7 như các chuỗi thông thường, bạn nên sử dụng import glob
import os
import shutil
for file_name in glob.glob('*.txt'):
new_path = os.path.join('archive', file_name)
shutil.move(file_name, new_path)
8, nối các đường dẫn bằng dấu tách đường dẫn chính xác trên hệ điều hành. Nhớ lại rằng Windows sử dụng import glob
import os
import shutil
for file_name in glob.glob('*.txt'):
new_path = os.path.join('archive', file_name)
shutil.move(file_name, new_path)
9 trong khi Mac và Linux sử dụng >>> os.path.isfile(os.path.join(os.path.expanduser('~'), 'realpython.txt'))
30 làm dấu phân cách. Sự khác biệt này có thể dẫn đến các lỗi khó phát hiện, chẳng hạn như ví dụ đầu tiên của chúng tôi trong phần giới thiệu chỉ hoạt động với các đường dẫn WindowsMô-đun import glob
import os
import shutil
for file_name in glob.glob('*.txt'):
new_path = os.path.join('archive', file_name)
shutil.move(file_name, new_path)
1 đã được giới thiệu trong Python 3. 4 (PEP 428) để đối phó với những thách thức này. Nó tập hợp các chức năng cần thiết ở một nơi và cung cấp chức năng đó thông qua các phương thức và thuộc tính trên một đối tượng >>> os.path.isfile(os.path.join(os.path.expanduser('~'), 'realpython.txt'))
32 dễ sử dụngBan đầu, các gói khác vẫn sử dụng chuỗi cho đường dẫn tệp, nhưng kể từ Python 3. 6, mô-đun import glob
import os
import shutil
for file_name in glob.glob('*.txt'):
new_path = os.path.join('archive', file_name)
shutil.move(file_name, new_path)
1 được hỗ trợ trong toàn bộ thư viện chuẩn, một phần do bổ sung giao thức đường dẫn hệ thống tệp. Nếu bạn gặp khó khăn với Python kế thừa, thì cũng có một backport dành cho Python 2Thời gian cho hành động. hãy để chúng tôi xem cách import glob
import os
import shutil
for file_name in glob.glob('*.txt'):
new_path = os.path.join('archive', file_name)
shutil.move(file_name, new_path)
1 hoạt động trong thực tếLoại bỏ các quảng cáoTạo đường dẫnTất cả những gì bạn thực sự cần biết là lớp >>> os.path.isfile(os.path.join(os.path.expanduser('~'), 'realpython.txt'))
35. Có một số cách khác nhau để tạo đường dẫn. Trước hết, có các phương thức lớp như >>> os.path.isfile(os.path.join(os.path.expanduser('~'), 'realpython.txt'))
36 (Thư mục làm việc hiện tại) và >>> os.path.isfile(os.path.join(os.path.expanduser('~'), 'realpython.txt'))
37 (thư mục chính của người dùng của bạn)>>> >>> os.path.isfile(os.path.join(os.path.expanduser('~'), 'realpython.txt'))
3Ghi chú. Trong suốt hướng dẫn này, chúng tôi sẽ giả định rằng import glob
import os
import shutil
for file_name in glob.glob('*.txt'):
new_path = os.path.join('archive', file_name)
shutil.move(file_name, new_path)
1 đã được nhập, không đánh vần >>> os.path.isfile(os.path.join(os.path.expanduser('~'), 'realpython.txt'))
39 như trên. Vì bạn sẽ chủ yếu sử dụng lớp >>> os.path.isfile(os.path.join(os.path.expanduser('~'), 'realpython.txt'))
32, nên bạn cũng có thể làm import glob
import os
import shutil
for file_name in glob.glob('*.txt'):
new_path = os.path.join('archive', file_name)
shutil.move(file_name, new_path)
51 và viết >>> os.path.isfile(os.path.join(os.path.expanduser('~'), 'realpython.txt'))
32 thay vì >>> os.path.isfile(os.path.join(os.path.expanduser('~'), 'realpython.txt'))
35
Một đường dẫn cũng có thể được tạo rõ ràng từ biểu diễn chuỗi của nó >>> import glob
import os
import shutil
for file_name in glob.glob('*.txt'):
new_path = os.path.join('archive', file_name)
shutil.move(file_name, new_path)
5Một mẹo nhỏ để xử lý các đường dẫn Windows. trên Windows, dấu phân cách đường dẫn là dấu gạch chéo ngược, import glob
import os
import shutil
for file_name in glob.glob('*.txt'):
new_path = os.path.join('archive', file_name)
shutil.move(file_name, new_path)
9. Tuy nhiên, trong nhiều ngữ cảnh, dấu gạch chéo ngược cũng được sử dụng làm ký tự thoát để thể hiện các ký tự không in được. Để tránh sự cố, hãy sử dụng chuỗi ký tự thô để biểu thị đường dẫn Windows. Đây là những chuỗi ký tự có import glob
import os
import shutil
for file_name in glob.glob('*.txt'):
new_path = os.path.join('archive', file_name)
shutil.move(file_name, new_path)
55 được thêm vào trước chúng. Trong chuỗi ký tự thô, import glob
import os
import shutil
for file_name in glob.glob('*.txt'):
new_path = os.path.join('archive', file_name)
shutil.move(file_name, new_path)
9 đại diện cho dấu gạch chéo ngược theo nghĩa đen. import glob
import os
import shutil
for file_name in glob.glob('*.txt'):
new_path = os.path.join('archive', file_name)
shutil.move(file_name, new_path)
57Cách thứ ba để xây dựng đường dẫn là nối các phần của đường dẫn bằng toán tử đặc biệt >>> os.path.isfile(os.path.join(os.path.expanduser('~'), 'realpython.txt'))
30. Toán tử dấu gạch chéo lên được sử dụng độc lập với dấu tách đường dẫn thực tế trên nền tảng>>> >>> path.parent
>>> (pathlib.Path.home() / 'realpython.txt').is_file()
4>>> os.path.isfile(os.path.join(os.path.expanduser('~'), 'realpython.txt'))
30 có thể tham gia một số đường dẫn hoặc kết hợp các đường dẫn và chuỗi (như trên) miễn là có ít nhất một đối tượng >>> os.path.isfile(os.path.join(os.path.expanduser('~'), 'realpython.txt'))
32. Nếu bạn không thích ký hiệu đặc biệt của >>> os.path.isfile(os.path.join(os.path.expanduser('~'), 'realpython.txt'))
30, bạn có thể làm điều tương tự với phương pháp >>> path.parent
>>> (pathlib.Path.home() / 'realpython.txt').is_file()
42>>> >>> path.parent
>>> (pathlib.Path.home() / 'realpython.txt').is_file()
9Lưu ý rằng trong các ví dụ trước, >>> os.path.isfile(os.path.join(os.path.expanduser('~'), 'realpython.txt'))
35 được biểu thị bằng >>> path.parent
>>> (pathlib.Path.home() / 'realpython.txt').is_file()
44 hoặc >>> path.parent
>>> (pathlib.Path.home() / 'realpython.txt').is_file()
45. Đối tượng thực tế đại diện cho đường dẫn phụ thuộc vào hệ điều hành cơ bản. (Tức là, ví dụ >>> path.parent
>>> (pathlib.Path.home() / 'realpython.txt').is_file()
44 chạy trên Windows, trong khi ví dụ >>> path.parent
>>> (pathlib.Path.home() / 'realpython.txt').is_file()
45 chạy trên Mac hoặc Linux. ) Xem phần Sự khác biệt của Hệ điều hành để biết thêm thông tinĐọc và ghi tập tinTheo truyền thống, cách để đọc hoặc ghi một tệp trong Python là sử dụng hàm >>> path.parent
>>> (pathlib.Path.home() / 'realpython.txt').is_file()
48 tích hợp sẵn. Điều này vẫn đúng vì hàm >>> path.parent
>>> (pathlib.Path.home() / 'realpython.txt').is_file()
48 có thể sử dụng trực tiếp các đối tượng >>> os.path.isfile(os.path.join(os.path.expanduser('~'), 'realpython.txt'))
32. Ví dụ sau tìm tất cả các tiêu đề trong tệp Markdown và in chúngimport glob
import os
import shutil
for file_name in glob.glob('*.txt'):
new_path = os.path.join('archive', file_name)
shutil.move(file_name, new_path)
8Một cách thay thế tương đương là gọi >>> path.parent
>>> (pathlib.Path.home() / 'realpython.txt').is_file()
91 trên đối tượng >>> os.path.isfile(os.path.join(os.path.expanduser('~'), 'realpython.txt'))
32import glob
import os
import shutil
for file_name in glob.glob('*.txt'):
new_path = os.path.join('archive', file_name)
shutil.move(file_name, new_path)
1Trên thực tế, >>> path.parent
>>> (pathlib.Path.home() / 'realpython.txt').is_file()
93 đang gọi >>> path.parent
>>> (pathlib.Path.home() / 'realpython.txt').is_file()
48 tích hợp ở hậu trường. Tùy chọn nào bạn sử dụng chủ yếu là vấn đề sở thíchĐể đọc và ghi tệp đơn giản, có một số phương pháp thuận tiện trong thư viện import glob
import os
import shutil
for file_name in glob.glob('*.txt'):
new_path = os.path.join('archive', file_name)
shutil.move(file_name, new_path)
1>>> path.parent
>>> (pathlib.Path.home() / 'realpython.txt').is_file()
96. mở đường dẫn ở chế độ văn bản và trả về nội dung dưới dạng chuỗi>>> path.parent
>>> (pathlib.Path.home() / 'realpython.txt').is_file()
97. mở đường dẫn ở chế độ nhị phân/byte và trả về nội dung dưới dạng chuỗi ký tự>>> path.parent
>>> (pathlib.Path.home() / 'realpython.txt').is_file()
98. mở đường dẫn và ghi dữ liệu chuỗi vào nó>>> path.parent
>>> (pathlib.Path.home() / 'realpython.txt').is_file()
99. mở đường dẫn ở chế độ nhị phân/byte và ghi dữ liệu vào đó
Ví dụ, mỗi phương pháp này xử lý việc mở và đóng tệp, làm cho chúng trở nên đơn giản để sử dụng >>> >>> os.path.isfile(os.path.join(os.path.expanduser('~'), 'realpython.txt'))
0Đường dẫn cũng có thể được chỉ định dưới dạng tên tệp đơn giản, trong trường hợp đó, chúng được diễn giải tương ứng với thư mục làm việc hiện tại. Ví dụ sau tương đương với ví dụ trước >>> >>> os.path.isfile(os.path.join(os.path.expanduser('~'), 'realpython.txt'))
1Phương thức import glob
import os
import shutil
for file_name in glob.glob('*.txt'):
new_path = os.path.join('archive', file_name)
shutil.move(file_name, new_path)
80 sẽ tìm đường dẫn đầy đủ. Dưới đây, chúng tôi xác nhận rằng thư mục làm việc hiện tại được sử dụng cho các tên tệp đơn giản>>> >>> os.path.isfile(os.path.join(os.path.expanduser('~'), 'realpython.txt'))
2Lưu ý rằng khi các đường dẫn được so sánh, chính các biểu diễn của chúng được so sánh. Trong ví dụ trên, import glob
import os
import shutil
for file_name in glob.glob('*.txt'):
new_path = os.path.join('archive', file_name)
shutil.move(file_name, new_path)
81 không bằng import glob
import os
import shutil
for file_name in glob.glob('*.txt'):
new_path = os.path.join('archive', file_name)
shutil.move(file_name, new_path)
82, bởi vì import glob
import os
import shutil
for file_name in glob.glob('*.txt'):
new_path = os.path.join('archive', file_name)
shutil.move(file_name, new_path)
81 được đại diện bởi import glob
import os
import shutil
for file_name in glob.glob('*.txt'):
new_path = os.path.join('archive', file_name)
shutil.move(file_name, new_path)
84 trong khi import glob
import os
import shutil
for file_name in glob.glob('*.txt'):
new_path = os.path.join('archive', file_name)
shutil.move(file_name, new_path)
82 được đại diện bởi import glob
import os
import shutil
for file_name in glob.glob('*.txt'):
new_path = os.path.join('archive', file_name)
shutil.move(file_name, new_path)
86Loại bỏ các quảng cáoChọn ra các thành phần của một đường dẫnCác phần khác nhau của đường dẫn có sẵn thuận tiện dưới dạng thuộc tính. Các ví dụ cơ bản bao gồm import glob
import os
import shutil
for file_name in glob.glob('*.txt'):
new_path = os.path.join('archive', file_name)
shutil.move(file_name, new_path)
87. tên tập tin mà không có bất kỳ thư mụcimport glob
import os
import shutil
for file_name in glob.glob('*.txt'):
new_path = os.path.join('archive', file_name)
shutil.move(file_name, new_path)
88. thư mục chứa tệp hoặc thư mục mẹ nếu đường dẫn là thư mụcimport glob
import os
import shutil
for file_name in glob.glob('*.txt'):
new_path = os.path.join('archive', file_name)
shutil.move(file_name, new_path)
89. tên tệp không có hậu tốimport glob
import os
import shutil
for file_name in glob.glob('*.txt'):
new_path = os.path.join('archive', file_name)
shutil.move(file_name, new_path)
10. phần mở rộng tập tinimport glob
import os
import shutil
for file_name in glob.glob('*.txt'):
new_path = os.path.join('archive', file_name)
shutil.move(file_name, new_path)
11. một phần của đường dẫn trước các thư mục
Đây là những thuộc tính đang hoạt động >>> >>> os.path.isfile(os.path.join(os.path.expanduser('~'), 'realpython.txt'))
3Lưu ý rằng import glob
import os
import shutil
for file_name in glob.glob('*.txt'):
new_path = os.path.join('archive', file_name)
shutil.move(file_name, new_path)
88 trả về một đối tượng >>> os.path.isfile(os.path.join(os.path.expanduser('~'), 'realpython.txt'))
32 mới, trong khi các thuộc tính khác trả về các chuỗi. Ví dụ, điều này có nghĩa là import glob
import os
import shutil
for file_name in glob.glob('*.txt'):
new_path = os.path.join('archive', file_name)
shutil.move(file_name, new_path)
88 có thể được xâu chuỗi như trong ví dụ trước hoặc thậm chí được kết hợp với >>> os.path.isfile(os.path.join(os.path.expanduser('~'), 'realpython.txt'))
30 để tạo các đường dẫn hoàn toàn mới>>> >>> os.path.isfile(os.path.join(os.path.expanduser('~'), 'realpython.txt'))
4Pathlib Cheatsheet tuyệt vời cung cấp một biểu diễn trực quan về các thuộc tính và phương thức này cũng như các thuộc tính và phương thức khác Di chuyển và xóa tệpThông qua import glob
import os
import shutil
for file_name in glob.glob('*.txt'):
new_path = os.path.join('archive', file_name)
shutil.move(file_name, new_path)
1, bạn cũng có quyền truy cập vào các hoạt động cấp hệ thống tệp cơ bản như di chuyển, cập nhật và thậm chí xóa tệp. Phần lớn, các phương pháp này không đưa ra cảnh báo hoặc chờ xác nhận trước khi thông tin hoặc tệp bị mất. Hãy cẩn thận khi sử dụng các phương pháp nàyĐể di chuyển tệp, hãy sử dụng import glob
import os
import shutil
for file_name in glob.glob('*.txt'):
new_path = os.path.join('archive', file_name)
shutil.move(file_name, new_path)
17. Lưu ý rằng nếu đích đã tồn tại, import glob
import os
import shutil
for file_name in glob.glob('*.txt'):
new_path = os.path.join('archive', file_name)
shutil.move(file_name, new_path)
17 sẽ ghi đè lên nó. Thật không may, import glob
import os
import shutil
for file_name in glob.glob('*.txt'):
new_path = os.path.join('archive', file_name)
shutil.move(file_name, new_path)
1 không hỗ trợ rõ ràng việc di chuyển tệp an toàn. Để tránh khả năng ghi đè đường dẫn đích, đơn giản nhất là kiểm tra xem đích có tồn tại hay không trước khi thay thế>>> os.path.isfile(os.path.join(os.path.expanduser('~'), 'realpython.txt'))
5Tuy nhiên, điều này sẽ mở ra cơ hội cho một điều kiện cuộc đua có thể xảy ra. Một quy trình khác có thể thêm một tệp tại đường dẫn >>> os.path.isfile(os.path.join(os.path.expanduser('~'), 'realpython.txt'))
00 giữa việc thực thi câu lệnh >>> os.path.isfile(os.path.join(os.path.expanduser('~'), 'realpython.txt'))
01 và phương thức import glob
import os
import shutil
for file_name in glob.glob('*.txt'):
new_path = os.path.join('archive', file_name)
shutil.move(file_name, new_path)
17. Nếu đó là một mối quan tâm, một cách an toàn hơn là mở đường dẫn đích để tạo độc quyền và sao chép rõ ràng dữ liệu nguồn>>> os.path.isfile(os.path.join(os.path.expanduser('~'), 'realpython.txt'))
6Đoạn mã trên sẽ tăng >>> os.path.isfile(os.path.join(os.path.expanduser('~'), 'realpython.txt'))
03 nếu đã tồn tại >>> os.path.isfile(os.path.join(os.path.expanduser('~'), 'realpython.txt'))
00. Về mặt kỹ thuật, điều này sao chép một tập tin. Để thực hiện di chuyển, chỉ cần xóa >>> os.path.isfile(os.path.join(os.path.expanduser('~'), 'realpython.txt'))
05 sau khi sao chép xong (xem bên dưới). Hãy chắc chắn rằng không có ngoại lệ nào được nêu raKhi bạn đổi tên tệp, các phương pháp hữu ích có thể là >>> os.path.isfile(os.path.join(os.path.expanduser('~'), 'realpython.txt'))
06 và >>> os.path.isfile(os.path.join(os.path.expanduser('~'), 'realpython.txt'))
07. Cả hai đều trả về đường dẫn ban đầu nhưng với tên hoặc hậu tố được thay thế tương ứngVí dụ >>> >>> os.path.isfile(os.path.join(os.path.expanduser('~'), 'realpython.txt'))
7Thư mục và tệp có thể bị xóa bằng cách sử dụng >>> os.path.isfile(os.path.join(os.path.expanduser('~'), 'realpython.txt'))
08 và >>> os.path.isfile(os.path.join(os.path.expanduser('~'), 'realpython.txt'))
09 tương ứng. (Một lần nữa, hãy cẩn thận. )ví dụTrong phần này, bạn sẽ thấy một số ví dụ về cách sử dụng import glob
import os
import shutil
for file_name in glob.glob('*.txt'):
new_path = os.path.join('archive', file_name)
shutil.move(file_name, new_path)
1 để đối phó với những thách thức đơn giảnLoại bỏ các quảng cáoĐếm tập tinCó một số cách khác nhau để liệt kê nhiều tệp. Đơn giản nhất là phương thức >>> os.path.isfile(os.path.join(os.path.expanduser('~'), 'realpython.txt'))
11, nó lặp lại tất cả các tệp trong thư mục đã cho. Ví dụ sau kết hợp lớp >>> os.path.isfile(os.path.join(os.path.expanduser('~'), 'realpython.txt'))
11 với lớp >>> os.path.isfile(os.path.join(os.path.expanduser('~'), 'realpython.txt'))
13 để đếm xem mỗi loại tệp có bao nhiêu tệp trong thư mục hiện tại>>> >>> os.path.isfile(os.path.join(os.path.expanduser('~'), 'realpython.txt'))
8Danh sách tệp linh hoạt hơn có thể được tạo bằng các phương pháp >>> os.path.isfile(os.path.join(os.path.expanduser('~'), 'realpython.txt'))
14 và >>> os.path.isfile(os.path.join(os.path.expanduser('~'), 'realpython.txt'))
15 (toàn cầu đệ quy). Chẳng hạn, >>> os.path.isfile(os.path.join(os.path.expanduser('~'), 'realpython.txt'))
16 trả về tất cả các tệp có hậu tố >>> os.path.isfile(os.path.join(os.path.expanduser('~'), 'realpython.txt'))
17 trong thư mục hiện tại. Phần sau chỉ tính các loại tệp bắt đầu bằng >>> os.path.isfile(os.path.join(os.path.expanduser('~'), 'realpython.txt'))
18>>> >>> os.path.isfile(os.path.join(os.path.expanduser('~'), 'realpython.txt'))
9Hiển thị cây thư mụcVí dụ tiếp theo định nghĩa một hàm, >>> os.path.isfile(os.path.join(os.path.expanduser('~'), 'realpython.txt'))
19, sẽ in một cây trực quan biểu thị cấu trúc phân cấp tệp, bắt nguồn từ một thư mục nhất định. Ở đây, chúng tôi cũng muốn liệt kê các thư mục con, vì vậy chúng tôi sử dụng phương thức >>> os.path.isfile(os.path.join(os.path.expanduser('~'), 'realpython.txt'))
15>>> path.parent
>>> (pathlib.Path.home() / 'realpython.txt').is_file()
0Lưu ý rằng chúng ta cần biết tệp nằm cách thư mục gốc bao xa. Để làm điều này, trước tiên chúng tôi sử dụng >>> os.path.isfile(os.path.join(os.path.expanduser('~'), 'realpython.txt'))
21 để biểu thị đường dẫn liên quan đến thư mục gốc. Sau đó, chúng tôi đếm số lượng thư mục (sử dụng thuộc tính >>> os.path.isfile(os.path.join(os.path.expanduser('~'), 'realpython.txt'))
22) trong biểu diễn. Khi chạy, chức năng này tạo ra một cây trực quan như sau>>> >>> path.parent
>>> (pathlib.Path.home() / 'realpython.txt').is_file()
1Ghi chú. Chuỗi f chỉ hoạt động trong Python 3. 6 trở lên. Trong Pythons cũ hơn, biểu thức >>> os.path.isfile(os.path.join(os.path.expanduser('~'), 'realpython.txt'))
23 có thể được viết là >>> os.path.isfile(os.path.join(os.path.expanduser('~'), 'realpython.txt'))
24
Tìm tệp được sửa đổi lần cuốiCác phương thức >>> os.path.isfile(os.path.join(os.path.expanduser('~'), 'realpython.txt'))
11, >>> os.path.isfile(os.path.join(os.path.expanduser('~'), 'realpython.txt'))
14 và >>> os.path.isfile(os.path.join(os.path.expanduser('~'), 'realpython.txt'))
15 rất phù hợp cho các biểu thức trình tạo và hiểu danh sách. Để tìm tệp trong thư mục được sửa đổi lần cuối, bạn có thể sử dụng phương pháp >>> os.path.isfile(os.path.join(os.path.expanduser('~'), 'realpython.txt'))
28 để lấy thông tin về các tệp bên dưới. Chẳng hạn, >>> os.path.isfile(os.path.join(os.path.expanduser('~'), 'realpython.txt'))
29 đưa ra thời gian sửa đổi lần cuối của tệp>>> >>> path.parent
>>> (pathlib.Path.home() / 'realpython.txt').is_file()
2Bạn thậm chí có thể lấy nội dung của tệp được sửa đổi lần cuối với biểu thức tương tự >>> >>> path.parent
>>> (pathlib.Path.home() / 'realpython.txt').is_file()
3Dấu thời gian được trả về từ các thuộc tính >>> os.path.isfile(os.path.join(os.path.expanduser('~'), 'realpython.txt'))
30 khác nhau biểu thị số giây kể từ ngày 1 tháng 1 năm 1970. Ngoài >>> os.path.isfile(os.path.join(os.path.expanduser('~'), 'realpython.txt'))
31, >>> os.path.isfile(os.path.join(os.path.expanduser('~'), 'realpython.txt'))
32 hoặc >>> os.path.isfile(os.path.join(os.path.expanduser('~'), 'realpython.txt'))
33 có thể được sử dụng để chuyển đổi dấu thời gian thành thứ gì đó hữu dụng hơnTạo một tên tệp duy nhấtVí dụ cuối cùng sẽ chỉ ra cách tạo tên tệp được đánh số duy nhất dựa trên mẫu. Đầu tiên, chỉ định một mẫu cho tên tệp, có chỗ cho bộ đếm. Sau đó, kiểm tra sự tồn tại của đường dẫn tệp được tạo bằng cách nối thư mục và tên tệp (với giá trị cho bộ đếm). Nếu nó đã tồn tại, hãy tăng bộ đếm và thử lại >>> path.parent
>>> (pathlib.Path.home() / 'realpython.txt').is_file()
4Nếu thư mục đã chứa các tệp >>> os.path.isfile(os.path.join(os.path.expanduser('~'), 'realpython.txt'))
34 và >>> os.path.isfile(os.path.join(os.path.expanduser('~'), 'realpython.txt'))
35, đoạn mã trên sẽ đặt >>> os.path.isfile(os.path.join(os.path.expanduser('~'), 'realpython.txt'))
36 thành >>> os.path.isfile(os.path.join(os.path.expanduser('~'), 'realpython.txt'))
37Loại bỏ các quảng cáoSự khác biệt của hệ điều hànhTrước đó, chúng tôi đã lưu ý rằng khi chúng tôi khởi tạo >>> os.path.isfile(os.path.join(os.path.expanduser('~'), 'realpython.txt'))
35, đối tượng >>> path.parent
>>> (pathlib.Path.home() / 'realpython.txt').is_file()
44 hoặc >>> path.parent
>>> (pathlib.Path.home() / 'realpython.txt').is_file()
45 đã được trả về. Loại đối tượng sẽ phụ thuộc vào hệ điều hành bạn đang sử dụng. Tính năng này giúp viết mã tương thích đa nền tảng khá dễ dàng. Có thể yêu cầu >>> path.parent
>>> (pathlib.Path.home() / 'realpython.txt').is_file()
44 hoặc >>> path.parent
>>> (pathlib.Path.home() / 'realpython.txt').is_file()
45 một cách rõ ràng, nhưng bạn sẽ chỉ giới hạn mã của mình cho hệ thống đó mà không có bất kỳ lợi ích nào. Một đường dẫn cụ thể như thế này không thể được sử dụng trên một hệ thống khác>>> >>> path.parent
>>> (pathlib.Path.home() / 'realpython.txt').is_file()
5Có thể đôi khi bạn cần biểu diễn đường dẫn mà không có quyền truy cập vào hệ thống tệp cơ bản (trong trường hợp đó, cũng có thể biểu thị đường dẫn Windows trên hệ thống không phải Windows hoặc ngược lại). Điều này có thể được thực hiện với các đối tượng >>> os.path.isfile(os.path.join(os.path.expanduser('~'), 'realpython.txt'))
43. Các đối tượng này hỗ trợ các hoạt động được thảo luận trong phần trên Thành phần đường dẫn nhưng không hỗ trợ các phương thức truy cập hệ thống tệp>>> >>> path.parent
>>> (pathlib.Path.home() / 'realpython.txt').is_file()
6Bạn có thể khởi tạo trực tiếp >>> os.path.isfile(os.path.join(os.path.expanduser('~'), 'realpython.txt'))
44 hoặc >>> os.path.isfile(os.path.join(os.path.expanduser('~'), 'realpython.txt'))
45 trên tất cả các hệ thống. Khởi tạo >>> os.path.isfile(os.path.join(os.path.expanduser('~'), 'realpython.txt'))
43 sẽ trả về một trong các đối tượng này tùy thuộc vào hệ điều hành bạn đang sử dụngĐường dẫn như các đối tượng thích hợpTrong phần giới thiệu, chúng tôi đã lưu ý ngắn gọn rằng các đường dẫn không phải là các chuỗi và một động lực đằng sau import glob
import os
import shutil
for file_name in glob.glob('*.txt'):
new_path = os.path.join('archive', file_name)
shutil.move(file_name, new_path)
1 là biểu thị hệ thống tệp bằng các đối tượng phù hợp. Trên thực tế, tài liệu chính thức của import glob
import os
import shutil
for file_name in glob.glob('*.txt'):
new_path = os.path.join('archive', file_name)
shutil.move(file_name, new_path)
1 có tiêu đề import glob
import os
import shutil
for file_name in glob.glob('*.txt'):
new_path = os.path.join('archive', file_name)
shutil.move(file_name, new_path)
1 - Đường dẫn hệ thống tệp hướng đối tượng. Cách tiếp cận Hướng đối tượng đã khá rõ ràng trong các ví dụ trên (đặc biệt nếu bạn đối chiếu nó với cách làm việc cũ của import glob
import os
import shutil
for file_name in glob.glob('*.txt'):
new_path = os.path.join('archive', file_name)
shutil.move(file_name, new_path)
2). Tuy nhiên, hãy để tôi để lại cho bạn một vài mẩu tin nhỏ khácKhông phụ thuộc vào hệ điều hành bạn đang sử dụng, các đường dẫn được thể hiện theo kiểu Posix, với dấu gạch chéo lên làm dấu phân cách đường dẫn. Trên Windows, bạn sẽ thấy một cái gì đó như thế này >>> import glob
import os
import shutil
for file_name in glob.glob('*.txt'):
new_path = os.path.join('archive', file_name)
shutil.move(file_name, new_path)
5Tuy nhiên, khi một đường dẫn được chuyển đổi thành một chuỗi, nó sẽ sử dụng dạng gốc, chẳng hạn như với dấu gạch chéo ngược trên Windows >>> >>> path.parent
>>> (pathlib.Path.home() / 'realpython.txt').is_file()
8Điều này đặc biệt hữu ích nếu bạn đang sử dụng một thư viện không biết cách xử lý các đối tượng >>> os.path.isfile(os.path.join(os.path.expanduser('~'), 'realpython.txt'))
35. Đây là một vấn đề lớn hơn trên các phiên bản Python trước 3. 6. Chẳng hạn, trong Python 3. 5, thư viện chuẩn >>> os.path.isfile(os.path.join(os.path.expanduser('~'), 'realpython.txt'))
52 chỉ có thể sử dụng đường dẫn chuỗi để đọc tệp. Cách xử lý các trường hợp như vậy là thực hiện chuyển đổi thành chuỗi một cách rõ ràng>>> >>> path.parent
>>> (pathlib.Path.home() / 'realpython.txt').is_file()
9Trong Python 3. 6 trở lên, nên sử dụng >>> os.path.isfile(os.path.join(os.path.expanduser('~'), 'realpython.txt'))
53 thay vì >>> os.path.isfile(os.path.join(os.path.expanduser('~'), 'realpython.txt'))
54 nếu bạn cần thực hiện chuyển đổi rõ ràng. Điều này an toàn hơn một chút vì nó sẽ gây ra lỗi nếu bạn vô tình cố chuyển đổi một đối tượng không giống đường dẫnCó thể phần bất thường nhất của thư viện import glob
import os
import shutil
for file_name in glob.glob('*.txt'):
new_path = os.path.join('archive', file_name)
shutil.move(file_name, new_path)
1 là việc sử dụng toán tử >>> os.path.isfile(os.path.join(os.path.expanduser('~'), 'realpython.txt'))
30. Để có một cái nhìn thoáng qua, chúng ta hãy xem điều đó được thực hiện như thế nào. Đây là một ví dụ về nạp chồng toán tử. hành vi của một nhà điều hành được thay đổi tùy thuộc vào bối cảnh. Bạn đã thấy điều này trước đây. Hãy nghĩ xem import glob
import os
import shutil
for file_name in glob.glob('*.txt'):
new_path = os.path.join('archive', file_name)
shutil.move(file_name, new_path)
7 có ý nghĩa khác nhau như thế nào đối với chuỗi và số. Python thực hiện quá tải toán tử thông qua việc sử dụng các phương thức gạch dưới kép (a. k. a. phương pháp dunder)Toán tử >>> os.path.isfile(os.path.join(os.path.expanduser('~'), 'realpython.txt'))
30 được định nghĩa theo phương thức >>> os.path.isfile(os.path.join(os.path.expanduser('~'), 'realpython.txt'))
59. Trên thực tế, nếu bạn xem mã nguồn của import glob
import os
import shutil
for file_name in glob.glob('*.txt'):
new_path = os.path.join('archive', file_name)
shutil.move(file_name, new_path)
1, bạn sẽ thấy nội dung nhưimport glob
import os
import shutil
for file_name in glob.glob('*.txt'):
new_path = os.path.join('archive', file_name)
shutil.move(file_name, new_path)
0Sự kết luậnKể từ Python 3. 4, import glob
import os
import shutil
for file_name in glob.glob('*.txt'):
new_path = os.path.join('archive', file_name)
shutil.move(file_name, new_path)
1 đã có sẵn trong thư viện tiêu chuẩn. Với import glob
import os
import shutil
for file_name in glob.glob('*.txt'):
new_path = os.path.join('archive', file_name)
shutil.move(file_name, new_path)
1, đường dẫn tệp có thể được biểu diễn bằng các đối tượng >>> os.path.isfile(os.path.join(os.path.expanduser('~'), 'realpython.txt'))
32 thích hợp thay vì các chuỗi đơn giản như trước đây. Các đối tượng này tạo mã xử lý đường dẫn tệp- Dễ đọc hơn, đặc biệt là vì
>>> os.path.isfile(os.path.join(os.path.expanduser('~'), 'realpython.txt'))
30 được sử dụng để nối các đường dẫn lại với nhau - Mạnh mẽ hơn, với hầu hết các phương thức và thuộc tính cần thiết có sẵn trực tiếp trên đối tượng
- Nhất quán hơn trên các hệ điều hành, vì các đặc thù của các hệ thống khác nhau bị ẩn bởi đối tượng
>>> os.path.isfile(os.path.join(os.path.expanduser('~'), 'realpython.txt'))
32
Trong hướng dẫn này, bạn đã biết cách tạo đối tượng >>> os.path.isfile(os.path.join(os.path.expanduser('~'), 'realpython.txt'))
32, đọc và ghi tệp, thao tác với đường dẫn và hệ thống tệp bên dưới, cũng như một số ví dụ về cách lặp qua nhiều đường dẫn tệpTải xuống PDF miễn phí. Bảng cheat Python 3 Đánh dấu là đã hoàn thành Xem ngay Hướng dẫn này có một khóa học video liên quan do nhóm Real Python tạo. Xem nó cùng với hướng dẫn bằng văn bản để hiểu sâu hơn. Sử dụng Mô-đun pathlib của Python 🐍 Thủ thuật Python 💌 Nhận một Thủ thuật Python ngắn và hấp dẫn được gửi đến hộp thư đến của bạn vài ngày một lần. Không có thư rác bao giờ. Hủy đăng ký bất cứ lúc nào. Được quản lý bởi nhóm Real Python Gửi cho tôi thủ thuật Python »Giới thiệu về Geir Arne Hjelle Geir Arne là một Pythonista cuồng nhiệt và là thành viên của nhóm hướng dẫn Real Python » Thông tin thêm về Geir Arne
Mỗi hướng dẫn tại Real Python được tạo bởi một nhóm các nhà phát triển để nó đáp ứng các tiêu chuẩn chất lượng cao của chúng tôi. Các thành viên trong nhóm đã làm việc trong hướng dẫn này là Aldren Đan Joanna Bậc thầy Kỹ năng Python trong thế giới thực Với quyền truy cập không giới hạn vào Python thực Tham gia với chúng tôi và có quyền truy cập vào hàng nghìn hướng dẫn, khóa học video thực hành và cộng đồng các Pythonistas chuyên gia Nâng cao kỹ năng Python của bạn » Bậc thầy Kỹ năng Python trong thế giới thực Với quyền truy cập không giới hạn vào Python thực Tham gia với chúng tôi và có quyền truy cập vào hàng ngàn hướng dẫn, khóa học video thực hành và cộng đồng các chuyên gia Pythonistas Nâng cao kỹ năng Python của bạn » Bạn nghĩ sao? Đánh giá bài viết này Tweet Chia sẻ Chia sẻ EmailBài học số 1 hoặc điều yêu thích mà bạn đã học được là gì? Mẹo bình luận. Những nhận xét hữu ích nhất là những nhận xét được viết với mục đích học hỏi hoặc giúp đỡ các sinh viên khác. Nhận các mẹo để đặt câu hỏi hay và nhận câu trả lời cho các câu hỏi phổ biến trong cổng thông tin hỗ trợ của chúng tôi |