Pertanyaan Temukan direktori dan direktori file saat ini [duplikat]


Pertanyaan ini sudah memiliki jawaban di sini:

Di Python, perintah apa yang dapat saya gunakan untuk menemukan:

  1. direktori saat ini (di mana saya berada di terminal ketika saya menjalankan skrip Python), dan
  2. di mana file yang saya eksekusi?

1493
2018-02-28 01:51


asal


Jawaban:


Untuk mendapatkan path lengkap ke direktori, file Python ada di dalamnya, tulis ini di file itu:

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

(Perhatikan bahwa mantra di atas tidak akan berfungsi jika Anda sudah menggunakannya os.chdir() untuk mengubah direktori kerja Anda saat ini, karena nilai dari __file__ konstanta relatif terhadap direktori kerja saat ini dan tidak diubah oleh os.chdir() panggilan.)


Untuk mendapatkan penggunaan direktori kerja saat ini

import os
cwd = os.getcwd()

Referensi dokumentasi untuk modul, konstanta dan fungsi yang digunakan di atas:


2263
2018-02-28 01:54



Direktori Kerja Saat Ini: os.getcwd ()

Dan itu atribut __file__  dapat membantu Anda mencari tahu di mana file yang Anda eksekusi berada. Posting SO ini menjelaskan semuanya: Bagaimana cara mendapatkan jalur file yang dieksekusi saat ini dengan Python?


271
2018-02-28 01:53



Anda mungkin menemukan ini berguna sebagai referensi:

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))

225
2017-12-05 10:18



1.Untuk mendapatkan jalur lengkap direktori saat ini

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

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

1.Untuk mendapatkan nama folder direktori saat ini saja

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

o / p: "myfolder"


47
2018-04-24 07:00



Jika Anda mencoba menemukan direktori saat ini dari file yang sedang Anda ikuti:

OS agnostic cara:

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

33
2017-10-07 09:10



Jawaban untuk # 1:

Jika Anda menginginkan direktori saat ini, lakukan ini:

import os
os.getcwd()

Jika Anda hanya menginginkan nama folder dan Anda memiliki jalur ke folder itu, lakukan ini:

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

Jawaban ke # 2:

import os
print os.path.abspath(__file__)

26
2017-11-05 09:31



Sedikit terlambat ke pesta, tetapi saya pikir cara paling ringkas untuk menemukan hanya nama konteks eksekusi Anda saat ini adalah

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

25
2017-10-09 10:31



Jika Anda menggunakan Python 3.4, ada merek yang lebih tinggi pathlib modul yang memungkinkan Anda untuk menelepon dengan nyaman pathlib.Path.cwd() untuk mendapatkan Path objek yang mewakili direktori kerja Anda saat ini, bersama dengan banyak fitur baru lainnya.

Info lebih lanjut tentang API baru ini dapat ditemukan sini.


24
2018-02-20 20:32



pathlib modul, diperkenalkan dengan Python 3.4 (PEP 428 - Modul pathlib - path filesystem berorientasi objek), membuat pengalaman yang terkait dengan jalur jauh lebih baik.

$ pwd
/home/skovorodkin/stack
$ tree
.
└── scripts
    ├── 1.py
    └── 2.py

Untuk mendapatkan penggunaan direktori kerja saat ini Path.cwd():

from pathlib import Path

print(Path.cwd())  # /home/skovorodkin/stack

Untuk mendapatkan jalur absolut ke file skrip Anda, gunakan Path.resolve() metode:

print(Path(__file__).resolve())  # /home/skovorodkin/stack/scripts/1.py

Dan untuk mendapatkan jalur direktori tempat skrip Anda berada, akses .parent(disarankan untuk menelepon .resolve() sebelum .parent):

print(Path(__file__).resolve().parent)  # /home/skovorodkin/stack/scripts

Ingat bahwa __file__ tidak dapat diandalkan dalam beberapa situasi: Bagaimana cara mendapatkan jalur file yang dieksekusi saat ini dengan Python?.


Harap dicatat bahwa Path.cwd(), Path.resolve() dan lainnya Path metode mengembalikan objek jalur (PosixPath dalam kasus saya), bukan string. Dalam Python 3.4 dan 3.5 yang menyebabkan rasa sakit, karena open fungsi built-in hanya bisa bekerja dengan objek string atau byte, dan tidak mendukung Path objek, jadi Anda harus berkonversi Path objek ke string atau digunakan Path.open() metode, tetapi opsi terakhir mengharuskan Anda mengubah kode lama:

$ cat 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')

$ python3.5 scripts/2.py
Traceback (most recent call last):
  File "scripts/2.py", line 11, in <module>
    with open(p) as f:
TypeError: invalid file: PosixPath('/home/skovorodkin/stack/scripts/2.py')

Seperti yang Anda lihat open(p) tidak berfungsi dengan Python 3.5.

PEP 519 - Menambahkan protokol jalur sistem file, diimplementasikan dengan Python 3.6, menambahkan dukungan PathLike objek ke open berfungsi, jadi sekarang Anda bisa lulus Path objek ke open berfungsi secara langsung:

$ python3.6 scripts/2.py
OK

20
2017-09-05 19:14