The pathlib
module, introduced in Python 3.4 [PEP 428 — The pathlib module — object-oriented filesystem paths], makes the path-related experience much much better.
pwd
/home/skovorodkin/stack
tree
.
└── scripts
├── 1.py
└── 2.py
In
order to get the current working directory, use Path.cwd[]
:
from pathlib import Path
print[Path.cwd[]] # /home/skovorodkin/stack
To get an absolute path to your script file, use the Path.resolve[]
method:
print[Path[__file__].resolve[]] # /home/skovorodkin/stack/scripts/1.py
And to get the path of a directory where your script is located, access
.parent
[it is recommended to call .resolve[]
before .parent
]:
print[Path[__file__].resolve[].parent] # /home/skovorodkin/stack/scripts
Remember that __file__
is not reliable in some situations: How do I get the path of the current executed file in Python?.
Please note, that Path.cwd[]
,
Path.resolve[]
and other Path
methods return path objects [PosixPath
in my case], not strings. In Python 3.4 and 3.5 that caused some pain, because open
built-in function could only work with string or bytes objects, and did not support Path
objects, so you had
to convert Path
objects to strings or use the Path.open[]
method, but the latter option required you to change old code:
File scripts/2.py
from pathlib import Path
p = Path[__file__].resolve[]
with p.open[] as f: pass
with open[str[p]] as f: pass
with open[p] as f: pass
print['OK']
Output
python3.5 scripts/2.py
Traceback [most recent call last]:
File "scripts/2.py", line 11, in
with open[p] as f:
TypeError: invalid file: PosixPath['/home/skovorodkin/stack/scripts/2.py']
As you can see, open[p]
does not work with Python 3.5.
PEP 519 — Adding a file system path
protocol, implemented in Python 3.6, adds support of PathLike
objects to the open
function, so now you can pass Path
objects to the open
function directly:
python3.6 scripts/2.py
OK
Khi có quá nhiều file trong một chương trình, chúng cần sắp xếp các file trong từng thư mục [directory] để dễ quản lý. Một thư mục có thể chứa các tập tin hoặc các thư mục con [subdirectory]. Python cũng hỗ trợ module os để giúp thao tác với thư mục, tập tin dễ dàng hơn.
Nội dung chính
- 1. Thư mục hiện hành [current directory] trong Python
- 1.1. Lấy đường dẫn của current directory trong Python
- 1.2. Thay đổi current directory trong Python
- 2. Lấy danh sách tập tin và thư mục con của một thư mục
- 3. Tạo [create] một thư mục mới trong Python
- 4. Đổi tên [rename] thư mục hoặc file trong Python
- 5. Xóa [delete] thư mục hoặc file trong Python
1. Thư mục hiện hành [current directory] trong Python
1.1. Lấy đường dẫn của current directory trong Python
Để lấy đường dẫn của thư mục hiện hành [current directory], chúng ta sử dụng hàm getcwd[]
trong module os. Hàm getcwd[]
sẽ trả về một string là
đường dẫn của thư mục mà chúng ta đang làm việc trong đó.
import os
print["Path of current directory:", os.getcwd[]]
Kết quảPath of current directory: C:\python-examples
Trong ví dụ trên, chúng ta đang làm việc với file code Python example.py
nằm trong thư mục C:\python-examples
.
1.2. Thay đổi current directory trong Python
Tùy vào yêu cầu chương trình, chúng ta có thể thay đổi current directory. Module os hỗ trợ hàm chdir[]
để làm
việc này.
import os
print["Path of current directory:", os.getcwd[]]
# change current directory
os.chdir['C:\Python\Python310']
print["Path of new current directory:", os.getcwd[]]
Kết quảPath of current directory: C:\python-examples
Path of new current directory: C:\Python\Python310
2. Lấy danh sách tập tin và thư mục con của một thư mục
Hàm listdir[]
giúp lấy danh sách tập tin và thư mục con của một thư mục được chỉ rõ đường dẫn. Nếu đường dẫn không được chỉ rõ thì listdir[]
sẽ lấy danh sách tập tin và thư mục con của current directory.
import os
print["List directories and files of Python310 folder:"]
print[os.listdir['C:\Python\Python310']]
Kết quảList directories and files of Python310 folder:
['DLLs', 'Doc', 'include', 'Lib', 'libs', 'LICENSE.txt', 'NEWS.txt', 'python.exe', 'python3.dll', 'python310.dll', 'pythonw.exe', 'Scripts', 'share', 'tcl', 'Tools', 'vcruntime140.dll', 'vcruntime140_1.dll']
Trong ví dụ trên, chúng
ta lấy list directories và files của foler C:\Python\Python310
. Còn đoạn code bên dưới sẽ list directories và files của current directory.
import os
# current directory is C:\python-examples
print["List directories and files of current directory:"]
print[os.listdir[]]
Kết quảList directories and files of current directory:
['data.txt', 'example.py', 'gochocit.txt', 'main.py', 'Robot', '__pycache__']
3. Tạo [create] một thư mục mới trong Python
Hàm mkdir[]
giúp tạo một thư mục mới với việc cung cấp đường dẫn đầy đủ [full path]. Nếu không cung cấp full path thì thư mục mới sẽ được tạo trong current
directory.
import os
# create folder hocit in current directory
os.mkdir['hocit']
# create folder hocit in C:\Python\Python310
os.mkdir['C:\Python\Python310\hocit']
4. Đổi tên [rename] thư mục hoặc file trong Python
Để đổi tên [rename] của một thư mục hoặc tập tin, chúng ta sử dụng hàm rename[]
. Hàm rename[]
có 2 tham số cơ bản. Tham số 1 là tên [hoặc đường dẫn] của folder hoặc file cũ. Tham số 2 là tên [hoặc đường dẫn] của folder hoặc file mới.
import os
# list directoris and file before rename[]
print["List directoris and file before rename[]:"]
print[os.listdir[]]
# rename folder
os.rename['hocit', 'datait']
# rename file
os.rename['gochocit.txt', 'data.txt']
# list directoris and file after rename[]
print["List directoris and file after rename[]:"]
print[os.listdir[]]
Kết quảList directoris and file before rename[]:
['example.py', 'gochocit.txt', 'hocit']
List directoris and file after rename[]:
['data.txt', 'datait', 'example.py']
5. Xóa [delete] thư mục hoặc file trong Python
Một file có thể được xóa với hàm remove[]. Còn một thư mục có thể xóa với hàm rmdir[]
.
import os
# list directoris and file before remove
print["List directoris and file before remove:"]
print[os.listdir[]]
# remove folder hocit
os.rmdir['hocit']
# list directoris and file after remove
print["List directoris and file after remove:"]
print[os.listdir[]]
Kết quảList directoris and file before remove:
['example.py', 'hocit']
List directoris and file after remove:
['example.py']
Hàm rmdir[]
chỉ có thể xóa những folder rỗng [empty folder].
Giả sử, chúng ta có folder hocit có chứa 1 file data.txt. Lúc này, sử dụng hàm rmdir[]
để xóa thì chương trình sẽ báo lỗi.
import os
print[os.listdir[]]
print[os.listdir['C:\python-examples\hocit']]
os.rmdir['hocit']
print[os.listdir[]]
Kết
quả['example.py', 'hocit']
['data.txt']
Traceback [most recent call last]:
File "c:\python-examples\example.py", line 4, in
os.rmdir['hocit']
OSError: [WinError 145] The directory is not empty: 'hocit'
Để xóa một folder không rỗng thì chúng ta sử dụng hàm rmtree[]
trong module shutil.
import os
import shutil
print[os.listdir[]]
print[os.listdir['C:\python-examples\hocit']]
shutil.rmtree['hocit']
print[os.listdir[]]
Kết quả['example.py', 'hocit']
['data.txt']
['example.py']
- Định nghĩa và gọi phương thức [method] trong Java
- Toán tử số học và toán tử quan hệ trong C++
- Chương trình tìm dãy số Fibonacci trong Java
- Toán tử logic, toán tử trên bit và toán tử gán trong C++
- Hàm uniqid[] trong PHP