python3获取当前目录(转)

转自:http://www.elias.cn/Python/GetPythonPath?from=Develop.GetPythonPath

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:\test”,sys.path[0]会输出“C:\test\getpath”。

更特别地,如果你用py2exe模块把Python脚本编译为可执行文件,那么sys.path[0]的输出还会变化:

  1. 如果把依赖库用默认的方式打包为zip文件,那么sys.path[0]会输出“C:\test\getpath\libarary.zip”;
  2. 如果在setup.py里面指定zipfile=None参数,依赖库就会被打包到exe文件里面,那么sys.path[0]会输出“C:\test\getpath\getpath.exe”。

(Edit Section ↓)

2.  正确的方法

但以上这些其实都不是脚本文件所在目录的位置。

比如C:\test目录下还有一个名为sub的目录;C:\test目录下有getpath.py,sub目录下有sub_path.py,getpath.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]

[Get Code]

其中__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”。

(Edit Section ↓)

3.  实例说明

总之,举例来讲,os.getcwd()、sys.path[0] (sys.argv[0])和__file__的区别是这样的:

假设目录结构是:

 C:\test
  |
  [dir] getpath
    |
    [file] path.py
    [dir] sub
      |
      [file] 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的所在目录
时间: 2024-10-28 08:23:14

python3获取当前目录(转)的相关文章

获取当前目录中的文件个数

一.获取当前目录下的文件个数 1.命令 ls -l | grep "^-" | wc -l 2.说明 ls -l 长列表输出该目录下文件信息(注意这里的文件,不同于一般的文件,可能是目录.链接.设备文件等):grep “^-“ 这里将长列表输出信息过滤一部分,只保留一般文件,如果只保留目录就是^d:wc -l 统计输出信息的行数,因为已经过滤得只剩一般文件了,所以统计结果就是一般文件信息的行数,又由于一行信息对应一个文件,所以也就是文件的个数 要想连隐藏文件一起统计,使用如下命令 ls

Python下获取当前目录中的所有子目录

p是输入目录 代码如下 import osdef getDirList(p):  #      b = [];    filepath=p    if filepath=="":        return b    filepath = filepath.replace( "/","\\")    if filepath[ -1] != "\\":        filepath = filepath+"\\&qu

dos指令 获取当前目录下所有文件命令解析

dir *.* /b >fileName.txt 其中: *.* 表示所有文件 包括文件夹 /b >fileName.txt 表示输入的文件名称 注意: 可以做个批处理文件 然后双击运行下看看效果就知道了~ 获取当前目录下的所有文件包括文件夹的dos指令 效果: ajax_jsonajax_json.zipfileName.batfileName.txtjava编码规范.docjd-gui.exe.lnknewzip.lnkOCJP_题库详解.docoracle.txt.lnkoracle解锁

python3获取文件目录和文件

import os,sys if __name__=="__main__": print("__file__ = %s" % __file__) #获取文件相对路径 print("sys.argv[0]) = %s" % sys.argv[0]) #获取文件的全路径加文件名 print("sys.path[0] = %s " % sys.path[0]) #获取文件的全路径 print("os.getcwd() = 

#### 批处理命令 获取当前目录下所有文件的路径

@echo off & setlocal EnableDelayedExpansion for /f "delims=" %%i in ('"dir /a/s/b/on *.*"') do ( set file=%%~fi set file=!file:/=/! echo !file! >> 路径.txt ) 将 "获取当前目录文件列表.cmd"拷贝到想要获取的目录下,然后双击即可,会在当前目录下生成"路径.txt&

CMD获取当前目录的绝对路径

@echo offecho 当前盘符:%~d0echo 当前盘符和路径:%~dp0echo 当前批处理全路径:%~f0echo 当前盘符和路径的短文件名格式:%~sdp0echo 当前CMD默认目录:%cd%echo 目录中有空格也可以加入""避免找不到路径echo 当前盘符:"%~d0"echo 当前盘符和路径:"%~dp0"echo 当前批处理全路径:"%~f0"echo 当前盘符和路径的短文件名格式:"%~sd

PHP获取当前目录和相对目录的方法

// 获取当前目录echo realpath("."). "<br>"; echo getcwd() . "<br>"; // 获取上级目录echo realpath(".."). "<br>"; // 获取网站根目录echo $_SERVER['DOCUMENT_ROOT'];// 获取目录信息$path_parts = pathinfo(__FILE__); echo

Linux Kernel中获取当前目录方法(undone)

目录 0. 引言 1. 基于进程内存镜像信息struct mm_struct获取struct path调用d_path()获取当前进程的"绝对路径" 2. 基于文件描述符(fd).task_struct调用d_path()获取当前进程的"当前目录" 3. 基于dentry.vfsmount调用d_path()获取当前进程的"当前目录" 4. 基于get_fs_pwd获取当前目录 0. 引言 本文涉及的是ring0下的获取当前进程工作目录的方法,L

警惕System.Environment.CurrentDirectory 获取当前目录

最近工作中,要做个客户端提醒的小工具:winform程序自然少不了要读取和应用程序同一个目录的配置文件(不是exe.config文件): 要读取当前应用程序所在目录我立马想到了System.Environment.CurrentDirectory 来获取当前工作目录.程序运行似乎一切正常完美无缺: 到了第二天早上来上班一开机弹出:"读取配置文件丢失".应用程序增加了开机自启动.弹出这个消息读取配文件失败,立马检查应用程序目录下的配置文件是不是被自己删了.一检查发现文件还在呀,退出程序重