1. 程式人生 > >python 獲取指令碼所在目錄的正確方法

python 獲取指令碼所在目錄的正確方法

1. 以前的方法

如果是要獲得程式執行的當前目錄所在位置,那麼可以使用os模組的os.getcwd()函式。

如果是要獲得當前執行的指令碼的所在目錄位置,那麼需要使用sys模組的sys.path[0]變數或者sys.argv[0]來獲得。實際上sys.path是Python會去尋找模組的搜尋路徑列表,sys.path[0]和sys.argv[0]是一回事因為Python會自動把sys.argv[0]加入sys.path。

具體來說,如果你在C:\test目錄下執行python getpath\getpath.py,那麼os.getcwd()會輸出C:\testsys.path[0]會輸出C:\test\getpath

更特別地,如果你用py2exe模組把Python指令碼編譯為可執行檔案,那麼sys.path[0]的輸出還會變化:
如果把依賴庫用預設的方式打包為zip檔案,那麼sys.path[0]會輸出C:\test\getpath\libarary.zip
如果在setup.py裡面指定zipfile=None引數,依賴庫就會被打包到exe檔案裡面,那麼sys.path[0]會輸出C:\test\getpath\getpath.exe

2. 正確的方法

但以上這些其實都不是指令碼檔案所在目錄的位置。
比如C:\test目錄下還有一個名為sub的目錄;C:\test目錄下有getpath.py

sub目錄下有 sub_path.pygetpath.py呼叫sub_path.py;我們在C:\test下執行getpath.py。如果我們在 sub_path.py裡面使用sys.path[0],那麼其實得到的是getpath.py所在的目錄路徑C:\test,因為Python虛擬機器是從getpath.py開始執行的。如果想得到sub_path.py的路徑,那麼得這樣:

os.path.split(os.path.realpath(__file__))[0]

其中file雖然是所在.py檔案的完整路徑,但是這個變數有時候返回相對路徑,有時候返回絕對路徑,因此還要用os.path.realpath()

函式來處理一下。也即在這個例子裡,os.path.realpath(__file__)輸出是C:\test\sub\sub_path.py,而os.path.split(os.path.realpath(__file__))[0]輸出才是C:\test\sub

3. 例項說明

總之,舉例來講,os.getcwd()、sys.path[0] (sys.argv[0])和file的區別是這樣的:
假設目錄結構是:
複製程式碼 程式碼如下:

C:test
|-getpath
    |-path.py
    |-sub
        |-sub_path.py

然後我們在C:\test下面執行python getpath/path.py,這時sub_path.py裡面與各種用法對應的值其實是:

os.getcwd() “C:\test”,取的是起始執行目錄

sys.path[0]sys.argv[0] “C:\test\getpath”,取的是被初始執行的指令碼的所在目錄

os.path.split(os.path.realpath(__file__))[0] “C:\test\getpath\sub”,取的是file所在檔案sub_path.py的所在目錄

參考這裡

相關推薦

python 獲取指令碼所在目錄正確方法

1. 以前的方法 如果是要獲得程式執行的當前目錄所在位置,那麼可以使用os模組的os.getcwd()函式。 如果是要獲得當前執行的指令碼的所在目錄位置,那麼需要使用sys模組的sys.path[0]變數或者sys.argv[0]來獲得。實際上sys.pat

python獲取檔案所在目錄和檔名,檢索當前檔名的方法

情況1:在一個目錄下面只有檔案,沒有資料夾,這個時候可以使用os.listdir 在我們有一個file目錄(資料夾),裡面有三個檔案: file(dir)| --|test1.txt --|test2.txt --|test3.txt 用下面的程式獲得檔案

[轉載]python文件和目錄操作方法大全(含更改文件夾下所有文件名稱的實例)

mknod 成員 並不會 and 刪除 緩沖 byte size 計算 http://blog.csdn.net/u010159842/article/details/53084067 一、Python中對文件、文件夾操作時經常用到的os模塊和shutil模塊常用方法。

python文件和目錄操作方法大全(含實例)

file python tree odin inux 長度 需要 tell mtr 一、python中對文件、文件夾操作時經常用到的os模塊和shutil模塊常用方法。 1 得到當前工作目錄,即當前Python腳本工作的目錄路徑: os.getcwd() 2 返回指定

python 獲取京東暢銷書目錄和網址!贊一個

  從事python開發有一年多時間,起初是學習全棧的,工作中主要是在做後端開發,現在練練手,瞭解一下最新爬蟲思路和爬蟲方法。 #!/usr/bin/env python # encoding=utf-8 import requests from bs4 import Bea

python 獲取路徑的幾種方法

1、sys.path[0] 獲取當前執行的python檔案路徑,無論是在別的模組中的什麼位置 使用sys.path[0] 都會返回同一個值,當前執行的Python檔案路徑。 2、os.getcwd() 獲取Python的工作目錄。預設就是命令列執行命令的路徑,但是可以通

JQuery .attr()和.prop()的正確使用場合,JQuery獲取checkbox狀態的正確方法

谷歌瀏覽器對$("#checkboxId").attr("checked")的返回值居然是undefined,百思不得其解,網上很多文章都說這樣用是正確的啊……谷歌搜尋了一下,很不容易才找到了下面這個表。 換成了$("#checkboxId").prop("checked"

python獲取程式執行檔案路徑方法

1.獲取當前執行主指令碼方法:sys.argv[0]和_ file _ (1)sys.argv 一個傳給Python指令碼的指令引數列表。sys.argv[0]是指令碼的名字。一般得到的是相對路徑,用os.path.abspath(sys.argv[0])得

使用Python獲取/dev/input目錄下event對應的裝置

關於Linux的Input子系統詳解請看這篇文章。 思路: 在某些情況下,我們想知道,event分別對應的是什麼裝置。雖然我們可以終端中通過命令獲取詳細資訊,我們可以使用Python進行相關處理後獲取event所對應的裝置的資訊。而系統所有輸入裝置都會出

python 獲取指令碼傳遞引數 及引數個數 檢查檔案 變數 是否存在 退出指令碼

python獲取指令碼傳遞引數: import sys print sys.argv[0] ##指令碼名 print sys.argv[1] ## 第一個引數print sys.argv ###引數陣列 print len(sys.argv) ##引數個數 pytho

Java中獲取檔案大小的正確方法

轉自:http://blog.csdn.net/chaijunkun/article/details/22387305 今天寫程式碼時需要實現獲取檔案大小的功能,目前有兩種實現方法,一種是使用File的length()方法;另外一種是使用FileInputStream的a

python 獲取類中除內置方法外的有方法名

self callable pro clas top end method __name__ __main__ #!/usr/bin/env python# !-*- coding:utf-8 -*-class Menu: def __init__(self):

python 獲取當前文件夾路徑及父級目錄的幾種方法

dirname imp nbsp div 路徑 file color spa class 獲取當前文件夾路徑及父級目錄: import os current_dir = os.path.abspath(os.path.dirname(__file__)) print(cu

python 獲取當前資料夾路徑及父級目錄的幾種方法

獲取當前資料夾路徑及父級目錄: import os current_dir = os.path.abspath(os.path.dirname(__file__)) print(current_dir) #F:\project\pritice current_dir1 = os.path.dirna

Python程式設計:通過反射獲取包名下所有模組及模組包含的方法

準備工作 環境: python 3.6 檔案結構 ├── clazz │ ├── __init__.py │ ├── a.py │ └── b.py └── main.py a.py 的程

python獲取當前目錄路徑和上級路徑常用方法

在使用python的時候總會遇到路徑切換的使用情況,如想從資料夾test下的test.py呼叫data資料夾下的data.txt檔案: . └── folder ├── data │ └── data.txt └── test └

Python OS 文件/目錄方法

iat bsp chmod flag chown 進行 rect 不包含 列表 Python OS 文件/目錄方法 os 模塊提供了非常豐富的方法用來處理文件和目錄。常用的方法如下表所示: 序號方法及描述 1 os.access(path, mode

Python全棧day21(調用模塊路徑BASEDIR的正確方法

變化 一個 pre dirname 發生 文件 導入 復制 sys 正常寫python程序會有一個可執行的bin.py文件,假如這個文件需要導入my_module裏面定義的模塊,應該怎麽設置sys.path 文件夾目錄結構如下,因為bin不在與my_module同級目錄下,

Python 按當前日期(年、月、日)創建多級目錄方法

rsquo else 8.4 指定 ont nth pytho 日期 想要 先看實際效果,現在時間2018.4.26 使用python腳本按照年月日生成多級目錄,創建的目錄可以將系統生成的日誌文件放入其中,方便查閱,代碼如下: #!/usr/bin/

python 獲取當前目錄下的文件目錄和文件名

文件目錄 spl list tdi files 文件的 span 兩個 utf os模塊下有兩個函數:   os.walk()   os.listdir() 1 # -*- coding: utf-8 -*- 2 3 import os