os.getcwd && os.path.abspath详解

本文介绍了Python中os.getcwd()函数的用途,即获取当前工作目录,并通过实例演示了不同路径下的运行效果。此外,还详细解释了os.path.abspath()函数的实现原理,包括如何处理相对路径和绝对路径。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

os.getcwd()

1、os.getcwd():
获取当前工作目录,也就是在哪个目录下运行这个程序。

举例来说:

假设F:\aaa\bbb\ccc目录下有个文件 TestDir.py,打印当前工作目录。进入windows命令行窗口:

  在F:\aaa\bbb\ccc运行 python TestDir.py,输出F:\aaa\bbb\ccc

  在F:\aaa\bbb运行 python ccc/TestDir.py,输出F:\aaa\bbb

  在F:\aaa运行 python bbb/ccc/TestDir.py,输出F:\aaa
  

如果使用pycharm的要注意:

pycharm里面默认的工作目录是你项目的工作目录!!!

2、如果我想获取TestDir.py文件所在的目录,怎么办?

使用sys.path[0]

import os
print(os.getcwd())

import sys
print(sys.path[0])

os.path.abspath源码解读

# Return an absolute path.  
try:  
    from nt import _getfullpathname  #nt是提供访问windows操作系统的接口.

except ImportError: # not running on Windows - mock up something sensible  如果导入失败
    def abspath(path):  
        """Return the absolute version of a path."""  
        if not isabs(path):  #如果不是绝对路径
            if isinstance(path, unicode):#判断编码类型是不是unicode
                cwd = os.getcwdu()  #是用getcwdu
            else:  
                cwd = os.getcwd()  #不是用getcwd
            path = join(cwd, path) #把path和当前工作路径连接起来.
        return normpath(path)  

else:  # use native Windows method on Windows
    def abspath(path):
    """Return the absolute version of a path."""

        if path: # Empty path must return current working directory.
            try:
                path = _getfullpathname(path)
            except WindowsError:
                pass # Bad path - return unchanged.
        elif isinstance(path, _unicode):
            path = os.getcwdu()
        else:
            path = os.getcwd()
        return normpath(path)

其实就是什么呢?
os.path.abspath取决于os.getcwd,如果是一个绝对路径,就返回,如果不是绝对路径,根据编码执行getcwd/getcwdu.
然后把path和当前工作路径连接起来.

参考:

https://www.cnblogs.com/nzbbody/archive/2013/11/12/3419473.html

http://blog.csdn.net/yes1cpp/article/details/43310595

<think>嗯,用户想了解os.path模块的用法和相关功能。首先,我需要回顾一下os.path模块的基本知识,确保自己理解正确。os.path模块主要用于处理文件路径,这在Python中是非常常见的任务,尤其是在文件操作和目录管理时。 我记得os.path模块有很多函数,比如os.path.join()os.path.split()os.path.exists()等等。这些函数分别有什么作用呢?比如,os.path.join()应该是用来拼接路径的,能自动处理不同操作系统的路径分隔符问题。而os.path.split()可能用来分割路径中的目录和文件名部分。os.path.exists()则是检查路径是否存在。这些都是常用的功能,需要详细解释。 接下来,用户可能需要具体的示例来理解这些函数的用法。比如,如何正确地拼接路径,避免手动拼接时出现的错误。例如,在Windows中使用反斜杠,而在Linux中使用正斜杠,os.path.join()会自动处理这些差异。这很重要,因为跨平台兼容性是Python的一个优势。 另外,还有一些函数如os.path.abspath()获取绝对路径,os.path.dirname()获取目录名,os.path.basename()获取文件名。这些函数在处理文件路径时非常实用,特别是当需要解析路径的不同部分时。需要举一些例子来说明这些函数的具体应用场景。 用户可能还会关心如何检查路径是否存在,或者判断是否是文件或目录。这时候就需要提到os.path.exists()os.path.isfile()os.path.isdir()这些函数。这些函数在文件操作前进行验证,避免程序出错,比如在尝试打开一个不存在的文件之前先检查是否存在。 还有时间相关的函数,如os.path.getmtime()获取修改时间,os.path.getsize()获取文件大小。这些在处理文件属性时可能会用到,比如备份文件时检查最后修改时间,或者统计文件大小。 需要注意不同操作系统之间的差异,比如路径分隔符和绝对路径的表示方法。os.path模块已经处理了这些差异,用户无需自己编写条件判断代码,这提高了代码的可移植性。 用户可能还会对如何获取当前工作目录或者如何展开用户目录感兴趣,这时候需要提到os.getcwd()os.path.expanduser(),虽然os.getcwd()属于os模块,但常与os.path一起使用。 另外,可能需要提醒用户注意路径规范化的问题,比如os.path.normpath()可以处理路径中的多余斜杠和相对路径符号(如...),使路径更规范。 现在需要组织这些信息,结构清晰,分点说明每个函数的用途,并给出示例代码。同时,要引用提供的参考资料,特别是官方文档,确保回答的权威性。比如,在介绍每个函数时,可以提到参考官方文档中的说明,或者在注意事项部分引用相关文档。 最后,生成相关问题,帮助用户进一步学习。比如,如何处理跨平台路径,如何遍历目录,os模块和os.path模块的关系等。这些问题可以引导用户深入探索相关模块的功能。 确保回答符合用户的要求,使用中文,行内公式用$...$,独立公式用$$...$$,但这里可能用不到太多数学公式,主要关注代码示例和函数说明。同时,检查LaTeX语法是否正确,虽然问题中可能涉及的数学内容不多,但如果有变量或方程的话需要注意格式。 总结一下,回答的结构应该是先介绍os.path模块的用途和特点,然后分点详细说明常用函数,每个函数给出功能描述、示例代码和可能的注意事项。接着,结合官方文档和其他引用资料,强调最佳实践和常见问题。最后生成相关问题,帮助用户进一步学习。</think># os.path模块用法详解 os.path模块是Python标准库中处理文件路径的核心工具,提供了**跨平台**的路径操作方法,支持Windows、Linux和macOS系统。以下从**基础功能、路径处理、文件属性判断、时间操作**四个维度展开说明: --- ## 一、基础路径操作 ### 1. 路径拼接 ```python import os path = os.path.join('folder', 'subdir', 'file.txt') # 自动处理路径分隔符 # Windows输出: folder\subdir\file.txt # Linux/Mac输出: folder/subdir/file.txt ``` ### 2. 路径拆分 ```python dir_name, file_name = os.path.split('/home/user/docs/report.pdf') print(dir_name) # /home/user/docs print(file_name) # report.pdf ``` ### 3. 路径扩展 ```python abs_path = os.path.abspath('data/sample.csv') # 获取绝对路径 home_dir = os.path.expanduser('~') # 展开用户目录 ``` --- ## 二、路径检测与验证 | 函数 | 功能说明 | 示例 | |-----------------------|----------------------------|-------------------------------| | `os.path.exists()` | 检测路径是否存在 | `os.path.exists('test.txt') → True` | | `os.path.isfile()` | 判断是否为文件 | `os.path.isfile('/etc/passwd') → True` | | `os.path.isdir()` | 判断是否为目录 | `os.path.isdir('/usr/local') → True` | | `os.path.islink()` | 检测符号链接 | `os.path.islink('/usr/bin/python') → True` | --- ## 三、文件属性获取 ### 1. 时间戳处理 ```python mtime = os.path.getmtime('data.log') # 获取最后修改时间(时间戳格式) from datetime import datetime print(datetime.fromtimestamp(mtime)) # 转换为可读时间 ``` ### 2. 文件大小获取 ```python file_size = os.path.getsize('video.mp4') # 返回字节数 print(f"{file_size/1024**2:.2f} MB") # 转换为MB单位 ``` --- ## 四、高级路径处理 ### 1. 路径规范化 ```python clean_path = os.path.normpath('docs//project/../report.doc') # 输出: docs/report.doc ``` ### 2. 扩展名处理 ```python base_name = os.path.splitext('archive.tar.gz')[0] # 获取基础名称 extension = os.path.splitext('image.png')[1] # 获取扩展名 ``` --- ## 最佳实践建议 1. **路径拼接必用os.path.join()** 避免手动拼接路径字符串,防止跨平台兼容性问题[^1] 2. **操作前先验证路径** 使用`exists()`/`isfile()`/`isdir()`进行预检查,防止FileNotFoundError[^2] 3. **处理符号链接时使用realpath** ```python true_path = os.path.realpath('/usr/bin/python') # 解析符号链接真实路径 ``` ---
评论 5
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值