Câu hỏi Tìm thư mục và thư mục của tệp hiện tại [trùng lặp]


Câu hỏi này đã có câu trả lời ở đây:

Trong Python, tôi có thể sử dụng các lệnh nào để tìm:

  1. thư mục hiện tại (nơi tôi đang ở trong terminal khi chạy script Python), và
  2. nơi tập tin tôi đang thực hiện là?

1501
2018-02-28 01:51


gốc


Không phải là một bản sao của "Làm thế nào để có được đường dẫn đầy đủ của thư mục hiện tại trong Python?" bởi vì câu hỏi này cũng yêu cầu thư mục làm việc hiện tại, và điều đó không. - Josiah Yoder
Mà làm cho nó hai câu hỏi - Mawg


Các câu trả lời:


Để có được đường dẫn đầy đủ đến thư mục một tệp Python được chứa trong, hãy viết nó trong tệp đó:

import os 
dir_path = os.path.dirname(os.path.realpath(__file__))

(Lưu ý rằng câu chú giải ở trên sẽ không hoạt động nếu bạn đã sử dụng os.chdir() để thay đổi thư mục làm việc hiện tại của bạn, vì giá trị của __file__ hằng số liên quan đến thư mục làm việc hiện tại và không bị thay đổi bởi os.chdir() gọi điện.)


Để sử dụng thư mục làm việc hiện tại

import os
cwd = os.getcwd()

Tài liệu tham khảo cho các mô-đun, hằng số và chức năng được sử dụng ở trên:

  • Các os và os.path mô-đun.
  • Các __file__ không thay đổi
  • os.path.realpath(path) (trả về "đường dẫn chuẩn của tên tệp được chỉ định, loại bỏ bất kỳ liên kết biểu tượng nào gặp phải trong đường dẫn")
  • os.path.dirname(path) (trả về "tên thư mục của tên đường dẫn path")
  • os.getcwd() (trả về "một chuỗi đại diện cho thư mục làm việc hiện tại")
  • os.chdir(path) ("thay đổi thư mục làm việc hiện tại thành path")

2284
2018-02-28 01:54



Tôi ghét nó khi tôi sử dụng để thêm vào sys.path. Bây giờ tôi cảm thấy rất bẩn thỉu. - FlipMcF
tập tin sẽ không hoạt động nếu được gọi từ một IDE (nói IDLE). Đề nghị os.path.realpath ('./') hoặc os.getcwd (). Anser tốt nhất ở đây: stackoverflow.com/questions/2632199/… - Neon22
@ Neon22 có thể phù hợp với một số nhu cầu, nhưng tôi cảm thấy cần lưu ý rằng những điều đó không giống nhau chút nào - các tệp có thể nằm ngoài thư mục làm việc. - Mark
Điều gì về đảo ngược thứ tự, nó có quan trọng không? os.path.realpath(os.path.dirname(__file__)) - Moberg
@Moberg Thường thì các đường dẫn sẽ giống nhau khi đảo chiều realpath với dirname, nhưng nó sẽ khác nhau khi tập tin (hoặc thư mục của nó) thực sự là một liên kết tượng trưng. - Lekensteyn


Thư mục làm việc hiện tại: os.getcwd ()

Thuộc tính __file__  có thể giúp bạn tìm ra nơi bạn đang thực thi tập tin. Bài đăng SO này giải thích mọi thứ: Làm thế nào để có được đường dẫn của tập tin thực hiện hiện tại trong Python?


272
2018-02-28 01:53





Bạn có thể thấy điều này hữu ích như một tham chiếu:

import os

print("Path at terminal when executing this file")
print(os.getcwd() + "\n")

print("This file path, relative to os.getcwd()")
print(__file__ + "\n")

print("This file full path (following symlinks)")
full_path = os.path.realpath(__file__)
print(full_path + "\n")

print("This file directory and name")
path, filename = os.path.split(full_path)
print(path + ' --> ' + filename + "\n")

print("This file directory only")
print(os.path.dirname(full_path))

227
2017-12-05 10:18



cái gì __file__ biểu thị ở đây? Nó không làm việc cho tôi. - Alex Raj Kaliamoorthy
Các __file__ là một thuộc tính của đối tượng mô-đun. Bạn cần chạy mã bên trong một tệp Python, không phải trên REPL. - Daniel Reis


1. Để có được đường dẫn thư mục đầy đủ hiện tại

    >>import os
    >>print os.getcwd()

o / p: "C: \ Users \ admin \ myfolder"

1.Để có được tên thư mục thư mục hiện tại một mình

    >>import os
    >>str1=os.getcwd()
    >>str2=str1.split('\\')
    >>n=len(str2)
    >>print str2[n-1]

o / p: "thư mục"


47
2018-04-24 07:00



làm tốt hơn trong một dòng, tôi nghĩ: os.getcwd().split('\\')[-1] - imkost
tốt hơn để sử dụng os.sep thay vì hardcode cho Windows: os.getcwd (). split (os.sep) [- 1] - kkurian
vấn đề với cách tiếp cận này là nếu bạn thực thi kịch bản từ một thư mục khác, bạn sẽ nhận được tên của thư mục đó thay vì các kịch bản ', có thể không phải là những gì bạn muốn. - Andy Terra
Đúng vậy, thư mục hiện tại lưu trữ tệp của bạn có thể không phải là CWD của bạn - f0ster


Nếu bạn đang cố gắng tìm thư mục hiện tại của tệp bạn hiện đang ở:

OS cách bất khả tri:

dirname, filename = os.path.split(os.path.abspath(__file__))

33
2017-10-07 09:10





Trả lời cho # 1:

Nếu bạn muốn thư mục hiện tại, hãy làm điều này:

import os
os.getcwd()

Nếu bạn muốn chỉ bất kỳ tên thư mục nào và bạn có đường dẫn đến thư mục đó, hãy thực hiện việc này:

def get_folder_name(folder):
    '''
    Returns the folder name, given a full folder path
    '''
    return folder.split(os.sep)[-1]

Trả lời cho # 2:

import os
print os.path.abspath(__file__)

26
2017-11-05 09:31



Tôi không biết làm thế nào bạn không có ngón tay cái lên. - Malachi Bazar
Câu trả lời này 1., nhưng không phải là 2. - leo


Một chút muộn cho bữa tiệc, nhưng tôi nghĩ cách gọn gàng nhất để tìm thấy tên của bối cảnh thực thi hiện tại của bạn sẽ là

current_folder_path, current_folder_name = os.path.split(os.getcwd())

25
2017-10-09 10:31





Nếu bạn đang sử dụng Python 3.4, có cấp độ hoàn toàn mới cao hơn pathlib mô-đun cho phép bạn gọi điện một cách thuận tiện pathlib.Path.cwd() để có được một Path đối tượng đại diện cho thư mục làm việc hiện tại của bạn, cùng với nhiều tính năng mới khác.

Bạn có thể tìm thêm thông tin về API mới này đây.


24
2018-02-20 20:32



Đối với phiên bản Python <3.4, ​​bạn có thể sử dụng pathlib2: pypi.python.org/pypi/pathlib2 - Eyal Levin