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模拟登录百度贴吧(百度贴吧登录)实例
Dec 18 Python
pygame学习笔记(5):游戏精灵
Apr 15 Python
Django model序列化为json的方法示例
Oct 16 Python
解决Python计算矩阵乘向量,矩阵乘实数的一些小错误
Aug 26 Python
解决django model修改添加字段报错的问题
Nov 18 Python
基于YUV 数据格式详解及python实现方式
Dec 09 Python
python 在threading中如何处理主进程和子线程的关系
Apr 25 Python
Keras设定GPU使用内存大小方式(Tensorflow backend)
May 22 Python
如何基于Python爬取隐秘的角落评论
Jul 02 Python
python3.9.1环境安装的方法(图文)
Feb 02 Python
Pycharm 如何设置HTML文件自动补全代码或标签
May 21 Python
TensorFlow中tf.batch_matmul()的用法
Jun 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
PHP Token(令牌)设计
2008/03/15 PHP
PHP网站备份程序代码分享
2011/06/10 PHP
基于flush()不能按顺序输出时的解决办法
2013/06/29 PHP
php四种基础算法代码实例
2013/10/29 PHP
PHP下获取上个月、下个月、本月的日期(strtotime,date)
2014/02/02 PHP
PHP使用GIFEncoder类生成的GIF动态图片验证码
2014/07/01 PHP
php设计模式之模板模式实例分析【星际争霸游戏案例】
2020/03/24 PHP
javascript 实现父窗口引用弹出窗口的值的脚本
2007/08/07 Javascript
javascript 嵌套的函数(作用域链)
2010/03/15 Javascript
javascript 多浏览器 事件大全
2010/03/23 Javascript
jquery $.ajax()取xml数据的小问题解决方法
2010/11/20 Javascript
jQuery调用RESTful WCF示例代码(GET方法/POST方法)
2014/01/26 Javascript
JS中捕获console.log()输出的方法
2015/04/16 Javascript
完美解决IE不支持Data.parse()的问题
2016/11/24 Javascript
javascript 封装Date日期类实例详解
2017/05/28 Javascript
js中split()方法得到的数组长度问题
2018/07/19 Javascript
如何提升vue.js中大型数据的性能
2019/06/21 Javascript
使用vue cli4.x搭建vue项目的过程详解
2020/05/08 Javascript
[42:50]NB vs VP 2018国际邀请赛小组赛BO2 第二场 8.18
2018/08/19 DOTA
python复制文件的方法实例详解
2015/05/22 Python
python交互式图形编程实例(二)
2017/11/17 Python
python 以16进制打印输出的方法
2018/07/09 Python
Python面向对象程序设计类的封装与继承用法示例
2019/04/12 Python
Python玩转PDF的各种骚操作
2019/05/06 Python
Python打包工具PyInstaller的安装与pycharm配置支持PyInstaller详细方法
2020/02/27 Python
详解如何在PyCharm控制台中输出彩色文字和背景
2020/08/17 Python
css3实例教程 一款纯css3实现的环形导航菜单
2014/10/20 HTML / CSS
西班牙香水和化妆品购物网站:Arenal Perfumerías
2019/03/01 全球购物
英国儿童设计师服装和玩具购物网站:Zac & Lulu
2020/10/19 全球购物
医院工作检讨书范文
2014/02/10 职场文书
活动宣传策划方案
2014/05/23 职场文书
合作意向协议书
2015/01/29 职场文书
教师年度考核个人总结
2015/02/12 职场文书
签订劳动合同通知书
2015/04/16 职场文书
Redis 哨兵机制及配置实现
2022/03/25 Redis
Pandas 数据编码的十种方法
2022/04/20 Python