Hướng dẫn python os path go up a directory - Đường dẫn hệ điều hành python đi lên một thư mục

298

Mới! Lưu câu hỏi hoặc câu trả lời và sắp xếp nội dung yêu thích của bạn. Tìm hiểu thêm.
Learn more.

Gần đây tôi nâng cấp Django từ v1.3.1 lên v1.4.

Trong

os.path.dirname(path) 
2 cũ của tôi, tôi có

TEMPLATE_DIRS = (
    os.path.join(os.path.dirname( __file__ ), 'templates').replace('\\', '/'),
    # Put strings here, like "/home/html/django_templates" or "C:/www/django/templates".
    # Always use forward slashes, even on Windows.
    # Don't forget to use absolute paths, not relative paths.
)

Điều này sẽ chỉ ra

os.path.dirname(path) 
3, nhưng vì Django v1.4 đã chuyển thư mục dự án đến cùng cấp với các thư mục ứng dụng, tệp
os.path.dirname(path) 
2 của tôi hiện đang ở
os.path.dirname(path) 
5 thay vì
os.path.dirname(path) 
6.

Vì vậy, thực sự câu hỏi của tôi bây giờ là gấp đôi:

  1. Làm cách nào để sử dụng
    os.path.dirname(path) 
    
    7 để xem xét một cấp một cấp trên từ
    os.path.dirname(path) 
    
    8. Nói cách khác, tôi muốn
    os.path.dirname(path) 
    
    9 tìm
    os.path.dirname(path) 
    
    3 bằng cách sử dụng các đường dẫn tương đối.
  2. Tôi có nên giữ thư mục
    os.path.dirname(os.path.dirname(path))
    
    1 (có các mẫu ứng dụng chéo, như
    os.path.dirname(os.path.dirname(path))
    
    2,
    os.path.dirname(os.path.dirname(path))
    
    3, v.v.) ở cấp độ dự án
    os.path.dirname(os.path.dirname(path))
    
    4 hoặc tại
    os.path.dirname(os.path.dirname(path))
    
    5?

Đã hỏi ngày 24 tháng 3 năm 2012 lúc 23:41Mar 24, 2012 at 23:41

Hướng dẫn python os path go up a directory - Đường dẫn hệ điều hành python đi lên một thư mục

hobbes3hobbes3hobbes3

26.2K24 Huy hiệu vàng85 Huy hiệu bạc116 Huy hiệu đồng24 gold badges85 silver badges116 bronze badges

4

os.path.abspath(os.path.join(os.path.dirname( __file__ ), '..', 'templates'))

Theo như thư mục mẫu nên đi, tôi không biết vì Django 1.4 vừa xuất hiện và tôi chưa nhìn vào nó. Bạn có lẽ nên hỏi một câu hỏi khác về SE để giải quyết vấn đề đó.

Bạn cũng có thể sử dụng

os.path.dirname(os.path.dirname(path))
6 để làm sạch đường dẫn, thay vì
os.path.dirname(os.path.dirname(path))
7. Tuy nhiên, trong tình huống này, Django mong đợi một con đường tuyệt đối hơn là một con đường tương đối.

Đối với khả năng tương thích của nền tảng chéo, hãy sử dụng

os.path.dirname(os.path.dirname(path))
8 thay vì
os.path.dirname(os.path.dirname(path))
9.

Đã trả lời ngày 24 tháng 3 năm 2012 lúc 23:48Mar 24, 2012 at 23:48

Hướng dẫn python os path go up a directory - Đường dẫn hệ điều hành python đi lên một thư mục

forivallforivallforivall

9.1202 Huy hiệu vàng32 Huy hiệu bạc58 Huy hiệu Đồng2 gold badges32 silver badges58 bronze badges

11

Để nhận thư mục của một tệp, chỉ cần sử dụng:

os.path.dirname(path) 

Để có được một thư mục, chỉ cần sử dụng lại

if os.path.islink(__file__): path = os.readlink (__file__)
0

os.path.dirname(os.path.dirname(path))

Bạn có thể muốn kiểm tra xem

os.path.dirname(path) 
8 có phải là symlink không:

if os.path.islink(__file__): path = os.readlink (__file__)

Hướng dẫn python os path go up a directory - Đường dẫn hệ điều hành python đi lên một thư mục

Đã trả lời ngày 24 tháng 3 năm 2012 lúc 23:49Mar 24, 2012 at 23:49

Jassinmjassinmjassinm

7.0733 Huy hiệu vàng32 Huy hiệu bạc42 Huy hiệu đồng3 gold badges32 silver badges42 bronze badges

2

Nếu bạn đang sử dụng Python 3.4 hoặc mới hơn, một cách thuận tiện để di chuyển nhiều thư mục là

if os.path.islink(__file__): path = os.readlink (__file__)
2:

from pathlib import Path

full_path = "path/to/directory"
str(Path(full_path).parents[0])  # "path/to"
str(Path(full_path).parents[1])  # "path"
str(Path(full_path).parents[2])  # "."

Đã trả lời ngày 25 tháng 7 năm 2018 lúc 17:01Jul 25, 2018 at 17:01

Hướng dẫn python os path go up a directory - Đường dẫn hệ điều hành python đi lên một thư mục

Birnbaumbirnbaumbirnbaum

4.37830 Huy hiệu bạc37 Huy hiệu đồng30 silver badges37 bronze badges

1

Bạn muốn chính xác điều này:

BASE_DIR = os.path.join( os.path.dirname( __file__ ), '..' )

Đã trả lời ngày 7 tháng 9 năm 2012 lúc 1:36Sep 7, 2012 at 1:36

Alan Viarsalan ViarsAlan Viars

2.95229 Huy hiệu bạc14 Huy hiệu đồng29 silver badges14 bronze badges

Cá nhân, tôi sẽ đi theo cách tiếp cận chức năng

def get_parent_dir(directory):
    import os
    return os.path.dirname(directory)

current_dirs_parent = get_parent_dir(os.getcwd())

Đã trả lời ngày 22 tháng 4 năm 2014 lúc 17:25Apr 22, 2014 at 17:25

Lord Sumnerlord SumnerLord Sumner

5144 Huy hiệu bạc5 Huy hiệu Đồng4 silver badges5 bronze badges

2

Tôi nghĩ rằng điều dễ nhất phải làm chỉ là sử dụng lại dirname () để bạn có thể gọi

os.path.dirname(os.path.dirname( __file__ ))

Nếu bạn tệp đang ở /users/hobbes3/sites/mysite/templates/method.py

Điều này sẽ trả về "/user/hobbes3/site/mysite"

Đã trả lời ngày 16 tháng 11 năm 2015 lúc 19:47Nov 16, 2015 at 19:47

Nếu bạn thích một lớp lót để lấy thư mục cha mẹ, tôi sẽ đề xuất điều này:

import os
    
parent_dir = os.path.split(os.getcwd())[0]

Phương pháp

if os.path.islink(__file__): path = os.readlink (__file__)
3 Trả về một tuple (đầu, đuôi) trong đó đuôi là tất cả sau khi chém cuối cùng. Vì vậy, chỉ mục đầu tiên là cha mẹ của con đường tuyệt đối của bạn.

Đã trả lời ngày 12 tháng 5 năm 2021 lúc 18:57May 12, 2021 at 18:57

Carlosggcarlosggcarlosgg

891 Huy hiệu bạc3 Huy hiệu đồng1 silver badge3 bronze badges

os.path.abspath(os.path.join(os.path.dirname( __file__ ), '..', 'templates'))
0

Update:

Nếu bạn tình cờ "Sao chép"

os.path.dirname(path) 
2 thông qua SymLinking, câu trả lời của Forivall sẽ tốt hơn:

os.path.abspath(os.path.join(os.path.dirname( __file__ ), '..', 'templates'))
1

Phương thức trên sẽ 'xem'

if os.path.islink(__file__): path = os.readlink (__file__)
5 trong khi phương thức của @forivall sẽ thấy
if os.path.islink(__file__): path = os.readlink (__file__)
6

Trong sự vắng mặt của các liên kết symlink, hai câu trả lời là giống hệt nhau.

Đã trả lời ngày 21 tháng 1 năm 2013 lúc 10:23Jan 21, 2013 at 10:23

Antony Hatchkinsantony HatchkinsAntony Hatchkins

29,8K9 Huy hiệu vàng106 Huy hiệu bạc108 Huy hiệu Đồng9 gold badges106 silver badges108 bronze badges

2

Điều này có thể hữu ích cho các trường hợp khác mà bạn muốn đi x thư mục. Chỉ cần chạy

if os.path.islink(__file__): path = os.readlink (__file__)
7 để đi lên 6 thư mục.

os.path.abspath(os.path.join(os.path.dirname( __file__ ), '..', 'templates'))
2

Đã trả lời ngày 23 tháng 8 năm 2016 lúc 9:32Aug 23, 2016 at 9:32

1

Đi lên một cấp độ từ thư mục công việc

os.path.abspath(os.path.join(os.path.dirname( __file__ ), '..', 'templates'))
3

hoặc từ thư mục hiện tại

os.path.abspath(os.path.join(os.path.dirname( __file__ ), '..', 'templates'))
4

Đã trả lời ngày 24 tháng 8 năm 2020 lúc 11:00Aug 24, 2020 at 11:00

Hướng dẫn python os path go up a directory - Đường dẫn hệ điều hành python đi lên một thư mục

Để đi

if os.path.islink(__file__): path = os.readlink (__file__)
8 thư mục lên ... chạy
if os.path.islink(__file__): path = os.readlink (__file__)
9

os.path.abspath(os.path.join(os.path.dirname( __file__ ), '..', 'templates'))
5

Đã trả lời ngày 24 tháng 4 năm 2019 lúc 12:58Apr 24, 2019 at 12:58

Hướng dẫn python os path go up a directory - Đường dẫn hệ điều hành python đi lên một thư mục

Jo3lJo3lJo3l

Phù hiệu bằng đồng 3133 bronze badges

Tôi ngạc nhiên khi xử lý một số lượng mã thông báo thư mục phụ huynh tùy ý ".." trong chuỗi đường dẫn không được xử lý trực tiếp bởi thư viện HĐH. Đây là một chức năng nhanh chóng và bẩn thỉu sẽ cung cấp cho bạn một chuỗi đường dẫn tuyệt đối từ một chuỗi tương đối:

os.path.abspath(os.path.join(os.path.dirname( __file__ ), '..', 'templates'))
6

Bạn có thể gọi nó với Open () như thế này:

os.path.abspath(os.path.join(os.path.dirname( __file__ ), '..', 'templates'))
7

Đã trả lời ngày 1 tháng 3 năm 2021 lúc 1:24Mar 1, 2021 at 1:24

Đối với một người hoang tưởng như tôi, tôi thích cái này hơn

os.path.abspath(os.path.join(os.path.dirname( __file__ ), '..', 'templates'))
8

Hướng dẫn python os path go up a directory - Đường dẫn hệ điều hành python đi lên một thư mục

serv-inc

33,8K9 Huy hiệu vàng149 Huy hiệu bạc177 Huy hiệu đồng9 gold badges149 silver badges177 bronze badges

Đã trả lời ngày 16 tháng 7 năm 2013 lúc 16:08Jul 16, 2013 at 16:08

1

Với việc sử dụng

os.path.dirname(path) 
7, chúng ta có thể đi lên một thư mục như thế

os.path.abspath(os.path.join(os.path.dirname( __file__ ), '..', 'templates'))
9

Ngoài ra sau khi tìm thấy thư mục bạn muốn, bạn có thể tham gia với các tệp/thư mục khác

os.path.dirname(path) 
0

Đã trả lời ngày 9 tháng 6 năm 2020 lúc 21:27Jun 9, 2020 at 21:27

Hướng dẫn python os path go up a directory - Đường dẫn hệ điều hành python đi lên một thư mục

Abdullahselekabdullahselekabdullahselek

7.5553 Huy hiệu vàng45 Huy hiệu bạc37 Huy hiệu đồng3 gold badges45 silver badges37 bronze badges

Tất nhiên: chỉ cần sử dụng

from pathlib import Path

full_path = "path/to/directory"
str(Path(full_path).parents[0])  # "path/to"
str(Path(full_path).parents[1])  # "path"
str(Path(full_path).parents[2])  # "."
1.

Wai Ha Lee

8.30873 Huy hiệu vàng59 Huy hiệu bạc88 Huy hiệu đồng73 gold badges59 silver badges88 bronze badges

Đã trả lời ngày 30 tháng 4 năm 2019 lúc 23:22Apr 30, 2019 at 23:22

Hướng dẫn python os path go up a directory - Đường dẫn hệ điều hành python đi lên một thư mục

Shwarmedy ShwarmaThe Shwarma

Phù hiệu bằng đồng 1801 màu bạc111 silver badge11 bronze badges

1

Từ đường dẫn tệp hiện tại bạn có thể sử dụng:

os.path.dirname(path) 
1

Đã trả lời ngày 1 tháng 9 năm 2020 lúc 15:19Sep 1, 2020 at 15:19

Hướng dẫn python os path go up a directory - Đường dẫn hệ điều hành python đi lên một thư mục

Không phải là một câu trả lời mà là một nhận xét tiếp tuyến dài mà có lẽ nên được đưa ra như ai đó có thể bị dẫn dắt lạc lối ...

Cú pháp

from pathlib import Path

full_path = "path/to/directory"
str(Path(full_path).parents[0])  # "path/to"
str(Path(full_path).parents[1])  # "path"
str(Path(full_path).parents[2])  # "."
2 Để có được một tệp trong cùng một thư mục với tệp Python đang chạy không phải là giải pháp "được khuyên" cho các gói, thay vào đó là dữ liệu gói được ưu tiên vì một vài lý do, ví dụ như trong gói đóng gói zip hoặc hệ thống tập tin phức tạp hơn .

from pathlib import Path

full_path = "path/to/directory"
str(Path(full_path).parents[0])  # "path/to"
str(Path(full_path).parents[1])  # "path"
str(Path(full_path).parents[2])  # "."
3 là giải pháp được đề xuất trước đây, nhưng sẽ bị loại bỏ tại một số điểm và
from pathlib import Path

full_path = "path/to/directory"
str(Path(full_path).parents[0])  # "path/to"
str(Path(full_path).parents[1])  # "path"
str(Path(full_path).parents[2])  # "."
4 là cách được đề xuất. Tuy nhiên, điều này

  • Yêu cầu
    from pathlib import Path
    
    full_path = "path/to/directory"
    str(Path(full_path).parents[0])  # "path/to"
    str(Path(full_path).parents[1])  # "path"
    str(Path(full_path).parents[2])  # "."
    
    5 và
    from pathlib import Path
    
    full_path = "path/to/directory"
    str(Path(full_path).parents[0])  # "path/to"
    str(Path(full_path).parents[1])  # "path"
    str(Path(full_path).parents[2])  # "."
    
    6 với
    from pathlib import Path
    
    full_path = "path/to/directory"
    str(Path(full_path).parents[0])  # "path/to"
    str(Path(full_path).parents[1])  # "path"
    str(Path(full_path).parents[2])  # "."
    
    7 trong tệp
    from pathlib import Path
    
    full_path = "path/to/directory"
    str(Path(full_path).parents[0])  # "path/to"
    str(Path(full_path).parents[1])  # "path"
    str(Path(full_path).parents[2])  # "."
    
    8
  • yêu cầu
    from pathlib import Path
    
    full_path = "path/to/directory"
    str(Path(full_path).parents[0])  # "path/to"
    str(Path(full_path).parents[1])  # "path"
    str(Path(full_path).parents[2])  # "."
    
    9 nếu PIP phân phối dưới dạng SDIST (nhưng không phải là bánh xe được xây dựng)
  • sẽ không hoạt động để nhập khẩu tương đối (nghĩa là chưa được cài đặt)
  • là một cách khôn ngoan và thường bị bỏ qua vì sự tỉnh táo trong các ứng dụng web do cách họ chạy

Đã trả lời ngày 17 tháng 1 lúc 15:20Jan 17 at 15:20

Hướng dẫn python os path go up a directory - Đường dẫn hệ điều hành python đi lên một thư mục

Matteo Ferlamatteo FerlaMatteo Ferla

1.7781 Huy hiệu vàng14 Huy hiệu bạc25 Huy hiệu Đồng1 gold badge14 silver badges25 bronze badges

Làm thế nào để bạn đi lên một thư mục trong hệ điều hành Python?

Có thể nhận được thư mục hiện tại và có thể di chuyển một hoặc một số cấp độ trong Python 3 với một số tùy chọn khác nhau: HĐH ...
Di chuyển một thư mục lên với hệ điều hành.Chdir ("..").
Di chuyển một thư mục lên với pathlib - p.cha mẹ..
Di chuyển lên với hệ điều hành.chdir (hệ điều hành. đường dẫn. dirname (hệ điều hành. getcwd ())).
Python di chuyển trở lại một thư mục ..

Con đường () làm gì trong Python?

Dirname (đường dẫn): Nó được sử dụng để trả về tên thư mục từ đường dẫn được đưa ra.Hàm này trả về tên từ đường dẫn ngoại trừ tên đường dẫn.return the directory name from the path given. This function returns the name from the path except the path name.

Làm cách nào để đi đến thư mục cha mẹ trong Python?

os.path.abspath () có thể được sử dụng để lấy thư mục mẹ.Phương pháp này được sử dụng để có được phiên bản chuẩn hóa của đường dẫn. path. abspath() can be used to get the parent directory. This method is used to get the normalized version of the path.