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实现爬虫统计学校BBS男女比例之数据处理(三)
Dec 31 Python
Pycharm学习教程(4) Python解释器的相关配置
May 03 Python
Python 3实战爬虫之爬取京东图书的图片详解
Oct 09 Python
Python定时器实例代码
Nov 01 Python
python提取图像的名字*.jpg到txt文本的方法
May 10 Python
python pandas修改列属性的方法详解
Jun 09 Python
Python3实现的判断回文链表算法示例
Mar 08 Python
深入了解Django View(视图系统)
Jul 23 Python
Python 中的 import 机制之实现远程导入模块
Oct 29 Python
用Python在Excel里画出蒙娜丽莎的方法示例
Apr 28 Python
python FTP编程基础入门
Feb 27 Python
python基于机器学习预测股票交易信号
May 25 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
2006/12/14 PHP
PHP面向对象学习笔记之一 基础概念
2012/10/06 PHP
PHP实现XML与数据格式进行转换类实例
2015/07/29 PHP
thinkPHP多表查询及分页功能实现方法示例
2017/07/03 PHP
利用Homestead快速运行一个Laravel项目的方法详解
2017/11/14 PHP
php微信开发之图片回复功能
2018/06/14 PHP
jQuery实现的立体文字渐变效果
2010/05/17 Javascript
将json当数据库一样操作的javascript lib
2013/10/28 Javascript
NodeJS制作爬虫全过程(续)
2014/12/22 NodeJs
JAVASCRIPT代码编写俄罗斯方块网页版
2015/11/26 Javascript
React-router中结合webpack实现按需加载实例
2017/05/25 Javascript
JS中去掉array中重复元素的方法
2017/05/26 Javascript
element ui 对话框el-dialog关闭事件详解
2018/02/26 Javascript
layui前端框架之table表数据的刷新方法
2018/08/17 Javascript
基于Vue2-Calendar改进的日历组件(含中文使用说明)
2019/04/14 Javascript
关于IDEA中的.VUE文件报错 Export declarations are not supported by current JavaScript version
2020/10/17 Javascript
Node.js path模块,获取文件后缀名操作
2020/11/07 Javascript
vue实现购物车的小练习
2020/12/21 Vue.js
python计算程序开始到程序结束的运行时间和程序运行的CPU时间
2013/11/28 Python
python过滤字符串中不属于指定集合中字符的类实例
2015/06/30 Python
Python利用BeautifulSoup解析Html的方法示例
2017/07/30 Python
浅析python实现scrapy定时执行爬虫
2018/03/04 Python
Python实现基于KNN算法的笔迹识别功能详解
2018/07/09 Python
Django框架模型简单介绍与使用分析
2019/07/18 Python
Python爬虫入门有哪些基础知识点
2020/06/02 Python
python的help函数如何使用
2020/06/11 Python
HTML5 CSS3给网站设计带来出色效果
2009/07/16 HTML / CSS
Book Depository欧盟:一家领先的国际图书零售商
2019/05/21 全球购物
翻译专业应届生求职信
2013/11/23 职场文书
半年思想汇报
2013/12/30 职场文书
一个大学生十年的职业规划
2014/01/17 职场文书
学习标兵获奖感言
2014/02/20 职场文书
2014年学校国庆主题活动方案
2014/09/16 职场文书
青岛导游词
2015/02/12 职场文书
运动会广播稿200字
2015/08/19 职场文书
医院中层管理人员培训心得体会
2016/01/11 职场文书