Python如何获取文件路径/目录


Posted in Python onSeptember 22, 2020

一、获取文件路径实现

1.1 获取当前文件路径

import os

current_file_path = __file__
print(f"current_file_path: {current_file_path}")

__file__变量其实有个问题,当文件被是被调用文件时__file__总是文件的绝对路径;但当文件是直接被执行的文件时,__file__并不总是文件的绝对路径,而是你执行该文件时给python传的路径。比如你是python xxx/yyy.py形式执行的,那么此时__file__的值就是xxx/yyy.py。

可以使用以下更统一的方式获取文件路径:

import inspect

current_file_name = inspect.getfile(inspect.currentframe())
print(f"current_file_name: {current_file_name}")

1.2 获取调用文件的文件路径

有时候我们想要获取调用当前文件的父文件的文件路径,此时可以通过以下代码实现:

import inspect

def be_call_fun():
  # stack()返回的是调用栈列表。
  frame_stack = inspect.stack()
  # 0是标识当前函数的栈,1是标识上一层函数的栈,依此类推。
  # 也就是这个数值不一定是1,要看你要获取其文件路径的函数在第几层
  caller_frame = frame_stack[1]
  caller_file_path = caller_frame.filename
  # 由于当前调用函数和被调用函数放在同一个文件,所以文件名还是当前文件名
  # 可将调用函数和被调用函数放到不同文件进行观察
  print(f"caller_file_path: {caller_file_path}")

def caller_fun():
  be_call_fun()

if __name__ == "__main__":
  caller_fun()

二、获取目录

2.1 获取当前工作目录

所谓当前工作目录,就是你执行python命令执行python文件时,shell所在的文件夹。

import os

current_working_dir = os.getcwd()
print(f"current_working_dir: {current_working_dir}")

2.2 借助路径获取目录

第一大节我们已经借绍了几种获取文件路径的方式,要获取对应的文件所处的文件夹,可直接借助这些路径+os.path.dirname()实现。

import os

# 文件绝对路径
current_file_path = __file__
# 借助dirname()从绝对路径中提取目录
current_file_dir = os.path.dirname(current_file_path)
print(f"current_file_dir: {current_file_dir}")

# 类似地可以借助basename()从绝对路径中提取文件名
# current_filename = os.path.basename(current_file_path)

# 另外建议使用os.path.join()来实现路径拼接,这样不用自己再关注路径分隔符的问题
# 再有是os.path.join()参数并不一定要就是目录+文件名形式,不管多少个参数都可以拼接
# current_file_path = os.path.join(current_file_dir, current_filename)

三、文件和目录的其他一些操作

3.1 文件的常用操作

r--读模式打开文件,如果文件不存在则报错。
r+--读写模式打开文件,如果文件不存在则报错。写时原有内容不会被清空,而是被替换式覆盖。
w--写模式打开文件,如果文件不存在则创建。已有内容会被清空。
w+--读写模式打开文件,如果文件不存在则创建。已有内容会被清空。
a--追加模式打开文件,如果文件不存在则创建。
a+--读追加模式打开文件,如果文件不存在则创建。

import os


file_name = "test.txt"
new_file_name = "new_test.txt"

# 创建空白文件
open(file_name, 'w').close()

# 删除文件
os.remove(file_name)

# 重命名文件
os.rename(file_name, new_file_name)

# 读文件
with open(file_name, 'r') as fd:
  # 读取所有内容
  fd.read()
  # 读取一行
  fd.readline()
  # 读取所有行,返回为各行组成的形表
  fd.readlines()

# 遍历文件各行简洁写法
for line in open(file_name, 'r', encoding='utf-8'):
  print(line)

# 写文件
with open(file_name, 'w') as fd:
  # 向文件写入内容,需要自行添加\n
  fd.write("test_str")
  # 向文件写入内容,需要自行添加\n
  # 和write的区别是,其参数除了可以是字符串,还可以是字符串列表
  fd.writelines(["test_str", "test_str"])

3.2 目录的常用操作

import os


dir_name = "test_dir/dir_name"
new_dir_name = "test_dir/new_dir_name"

# 创建目录。此种形式是的于shell的mkdir,在父目录不存在时会创建失败
os.mkdir(dir_name)
# 创建目录。此种形式是的于shell的mkdir -p,在父目录不存在时会自动创建父文件夹
os.makedirs(dir_name, exist_ok=True)

# 删除目录。此种形式相当于shell的rmdir,在目录非空时删除失败
os.rmdir(dir_name)
# 删除目录。此种形式相当于shell的rm -rf
import shutil
shutil.rmtree(dir_name)

# 重命名目录。
os.rename(dir_name, new_dir_name)

# 遍历目录
# dir_path是当前遍历到的目录。dir_names是dir_path下的文件夹列表。file_names是是dir_path下的文件列表
# 如果想实现目录白名单,将白名单目录从dir_names中去除即可
for (dir_path, dir_names, file_names) in os.walk(dir_name):
  for file_name in file_names:
    print(os.path.join(dir_path, file_name))

以上就是Python如何获取文件路径/目录的详细内容,更多关于Python获取文件路径/目录的资料请关注三水点靠木其它相关文章!

Python 相关文章推荐
Python将xml和xsl转换为html的方法
Mar 10 Python
python实现定时播放mp3
Mar 29 Python
python实现连接mongodb的方法
May 08 Python
python实现查找excel里某一列重复数据并且剔除后打印的方法
May 26 Python
Python2实现的LED大数字显示效果示例
Sep 04 Python
对Python3.6 IDLE常用快捷键介绍
Jul 16 Python
详解关于Django中ORM数据库迁移的配置
Oct 08 Python
Python实现Event回调机制的方法
Feb 13 Python
python模块常用用法实例详解
Oct 17 Python
python3 Scrapy爬虫框架ip代理配置的方法
Jan 17 Python
Python 读取有公式cell的结果内容实例方法
Feb 17 Python
numpy实现RNN原理实现
Mar 02 Python
JupyterNotebook 输出窗口的显示效果调整实现
Sep 22 #Python
python 实现压缩和解压缩的示例
Sep 22 #Python
python 无损批量压缩图片(支持保留图片信息)的示例
Sep 22 #Python
Pytho爬虫中Requests设置请求头Headers的方法
Sep 22 #Python
python 线程的五个状态
Sep 22 #Python
python 如何实现遗传算法
Sep 22 #Python
利用python汇总统计多张Excel
Sep 22 #Python
You might like
PHP4之COOKIE支持详解
2006/10/09 PHP
ie6 动态缩略图不显示的原因
2009/06/21 PHP
apache+codeigniter 通过.htcaccess做动态二级域名解析
2012/07/01 PHP
浅析PHP原理之变量(Variables inside PHP)
2013/08/09 PHP
静态的动态续篇之来点XML
2006/08/15 Javascript
jquery imgareaselect 使用利用js与程序结合实现图片剪切
2009/07/30 Javascript
javascript,jquery闭包概念分析
2010/06/19 Javascript
jquery 插件学习(三)
2012/08/06 Javascript
JS Replace 全部替换字符的用法小结
2013/12/24 Javascript
jQuery Easyui学习教程之实现datagrid在没有数据时显示相关提示内容
2016/07/09 Javascript
JavaScript创建对象的七种方式全面总结
2017/08/21 Javascript
ES6中Array.includes()函数的用法
2017/09/20 Javascript
JS中promise化微信小程序api
2018/04/12 Javascript
vue 自动化路由实现代码
2019/09/03 Javascript
微信小程序云函数添加数据到数据库的方法
2020/03/04 Javascript
JS+CSS+HTML实现“代码雨”类似黑客帝国文字下落效果
2020/03/17 Javascript
[49:20]2014 DOTA2国际邀请赛中国区预选赛5.21 CIS VS TongFu
2014/05/22 DOTA
[49:17]DOTA2-DPC中国联赛 正赛 Phoenix vs Dynasty BO3 第三场 1月26日
2021/03/11 DOTA
利用python实现xml与数据库读取转换的方法
2017/06/17 Python
python登录并爬取淘宝信息代码示例
2017/12/09 Python
Python使用Beautiful Soup爬取豆瓣音乐排行榜过程解析
2019/08/15 Python
导入tensorflow:ImportError: libcublas.so.9.0 报错
2020/01/06 Python
Python在字符串中处理html和xml的方法
2020/07/31 Python
python re.match()用法相关示例
2021/01/27 Python
HTML5中的新元素介绍
2008/10/17 HTML / CSS
巴黎卡诗加拿大官网:Kérastase加拿大
2018/11/12 全球购物
应届毕业生如何写求职信
2014/02/16 职场文书
打造高效课堂实施方案
2014/03/22 职场文书
个人债务授权委托书范本
2014/10/05 职场文书
承诺书范本
2015/01/21 职场文书
采购员岗位职责
2015/02/03 职场文书
离职信范本
2015/06/23 职场文书
员工工作失职检讨书范文!
2019/07/03 职场文书
Python pandas之求和运算和非空值个数统计
2021/08/07 Python
前端监听websocket消息并实时弹出(实例代码)
2021/11/27 Javascript
python 实现图片特效处理
2022/04/03 Python