相比常用的 os.path而言,pathlib 对于目录路径的操作更简介也更贴近 Pythonic。但是它不单纯是为了简化操作,还有更大的用途。

pathlib 是Python内置库,Python 文档给它的定义是:The pathlib module – object-oriented filesystem paths(面向对象的文件系统路径)

pathlib 提供表示文件系统路径的类,其语义适用于不同的操作系统。

更多详细的内容可以参考官方文档:

https://docs.python.org/3/library/pathlib.html#methods

很多人学习python,不知道从何学起。

很多人学习python,掌握了基本语法过后,不知道在哪里寻找案例上手。

很多已经做案例的人,却不知道如何去学习更加高深的知识。

那么针对这三类人,我给大家提供一个好的学习平台,免费领取视频教程,电子书籍,以及课程的源代码!

QQ群:1156465813

一、Path 类的基本使用

下面是获取文件名、获取文件名除后缀的部分、获取文件后缀、返回一个iterable 包含所有父目录等常用操作示例

from pathlib import Path

path = r'D:\python\pycharm2020\program\pathlib模块的基本使用.py'

p = Path(path)

print(p.name) # 获取文件名

print(p.stem) # 获取文件名除后缀的部分

print(p.suffix) # 获取文件后缀

print(p.parent) # 相当于dirname

print(p.parent.parent.parent)

print(p.parents) # 返回一个iterable 包含所有父目录

for i in p.parents:

print(i)

print(p.parts) # 将路径通过分隔符分割成一个元组

运行结果如下:

pathlib模块的基本使用.py

pathlib模块的基本使用

.py

D:\python\pycharm2020\program

D:\python

D:\python\pycharm2020\program

D:\python\pycharm2020

D:\python

D:\

('D:\\', 'python', 'pycharm2020', 'program', 'pathlib模块的基本使用.py')

Path.cwd()返回表示当前目录的路径对象

Path.home()返回表示用户主目录的路径对象

Path.expanduser()返回带有扩展的 ~user 构造的新路径

from pathlib import Path

path_1 = Path.cwd() # 获取当前文件路径

path_2 = Path.home()

p1 = Path('~/pathlib模块的基本使用.py')

print(path_1)

print(path_2)

print(p1.expanduser())

运行结果如下:

D:\python\pycharm2020\program

C:\Users\Administrator

C:\Users\Administrator\pathlib模块的基本使用.py

Path.stat()返回一个操作系统统计结果包含有关此路径的信息的对象

from pathlib import Path

import datetime

p = Path('pathlib模块的基本使用.py')

print(p.stat()) # 获取文件详细信息

print(p.stat().st_size) # 文件的字节大小

print(p.stat().st_ctime) # 文件创建时间

print(p.stat().st_mtime) # 上次修改文件的时间

creat_time = datetime.datetime.fromtimestamp(p.stat().st_ctime)

st_mtime = datetime.datetime.fromtimestamp(p.stat().st_mtime)

print(f'该文件创建时间:{creat_time}')

print(f'上次修改该文件的时间:{st_mtime}')

运行结果如下:

os.stat_result(st_mode=33206, st_ino=3659174698076635, st_dev=3730828260, st_nlink=1, st_uid=0, st_gid=0, st_size=543, st_atime=1597366826, st_mtime=1597366826, st_ctime=1597320585)

543

1597320585.7657475

1597366826.9711637

该文件创建时间:2020-08-13 20:09:45.765748

上次修改该文件的时间:2020-08-14 09:00:26.971164

从不同.stat().st_属性 返回的时间戳表示自1970年1月1日以来的秒数,可以用datetime.fromtimestamp将时间戳转换为有用的时间格式。

Path.exists()路径是否存在于现有文件或目录

Path.resolve(strict=False)将路径设为绝对路径,解析任何符号链接。返回一个新的路径对象

from pathlib import Path

p1 = Path('pathlib模块的基本使用.py') # 文件

p2 = Path(r'D:\python\pycharm2020\program') # 文件夹

absolute_path = p1.resolve()

print(absolute_path)

print(Path('.').exists())

print(p1.exists(), p2.exists())

print(p1.is_file(), p2.is_file())

print(p1.is_dir(), p2.is_dir())

print(Path('/python').exists())

print(Path('non_existent_file').exists())

运行结果如下:

D:\python\pycharm2020\program\pathlib模块的基本使用.py

True

True True

True False

False True

True

False

Path.iterdir()当路径指向某个目录时,将生成该目录内容的path对象

from pathlib import Path

p = Path('/python')

# python目录下存在的文件

for child in p.iterdir():

print(child)

运行结果如下:

\python\Anaconda

\python\EVCapture

\python\Evernote_6.21.3.2048.exe

\python\Notepad++

\python\pycharm-community-2020.1.3.exe

\python\pycharm2020

\python\pyecharts-assets-master

\python\pyecharts-gallery-master

\python\Sublime text 3

Path.glob(pattern)Glob此路径表示的目录中给定的相对模式,生成所有匹配的文件(任何类型),**模式表示递归地此目录和所有子目录。换句话说,它支持递归全局化。

Note 在大型目录树中使用 **模式可能会耗费大量时间

递归遍历该目录下所有文件,获取所有符合pattern的文件,返回一个generator。

下面是一些常用操作的代码,拿走就用

获取该文件目录下所有.py文件

from pathlib import Path

path = r'D:\python\pycharm2020\program'

p = Path(path)

file_name = p.glob('**/*.py')

print(type(file_name)) #

for i in file_name:

print(i)

获取该文件目录下所有.jpg图片

from pathlib import Path

path = r'D:\python\pycharm2020\program'

p = Path(path)

file_name = p.glob('**/*.jpg')

print(type(file_name)) #

for i in file_name:

print(i)

获取给定目录下所有.txt文件、.jpg图片和.py文件

from pathlib import Path

def get_files(patterns, path):

all_files = []

p = Path(path)

for item in patterns:

file_name = p.rglob(f'**/*{item}')

all_files.extend(file_name)

return all_files

path = input('>>>请输入文件路径:')

results = get_files(['.txt', '.jpg', '.py'], path)

print(results)

for file in results:

print(file)

关于Path.mkdir(mode=0o777, parents=False, exist_ok=False) 的说明

在给定的路径上创建一个新目录。如果指定了mode,它将与进程的umask值结合起来,以确定文件模式和访问标志。如果路径已存在,则引发FileExistsError。

如果parents参数设置为True,则将根据需要创建此路径的任何缺少的父级;它们是使用默认权限创建的,而不考虑模式(模仿POSIX mkdir-p命令)。

如果父项为False(默认值),则缺少父项将引发FileNotFoundError。

如果exist_ok为False(默认值),则在目标目录已存在的情况下引发FileExistsError。

如果exist_ok为True,则将忽略 FileExistsError 异常(与POSIX mkdir-p命令的行为相同),但仅当最后一个路径组件不是现有的非目录文件时。

在版本3.5中更改:添加了exist_ok参数。

Path.rmdir():删除此目录,目录必须为空。

from pathlib import Path

p = Path(r'D:\python\pycharm2020\program\test')

p.mkdir()

p.rmdir()

from pathlib import Path

p = Path(r'D:\python\test1\test2\test3')

p.mkdir(parents=True) # If parents is true, any missing parents of this path are created as needed

p.rmdir() # 删除的是test3文件夹

from pathlib import Path

p = Path(r'D:\python\test1\test2\test3')

p.mkdir(exist_ok=True)

Path.unlink()(missing_ok=False):删除此文件或符号链接。如果路径指向目录,请使用Path.rmdir()代替。如果missing_ok为False(默认值),则在路径不存在的情况下引发FileNotFoundError。如果missing_ok为true,则将忽略FileNotFoundError异常。在版本3.8中更改:添加了缺少的“确定”参数。

Path.rename()(target):将此文件或目录重命名为给定目标,并返回指向目标的新路径实例。在Unix上,如果目标存在并且是一个文件,如果用户有权限,它将被无提示地替换。目标可以是字符串或其他路径对象。

Path.open(mode='r', buffering=-1, encoding=None, errors=None, newline=None):打开路径指向的文件,就像内置的 open() 函数一样。

from pathlib import Path

p = Path('foo.txt')

p.open(mode='w').write('some text')

target = Path('new_foo.txt')

p.rename(target)

content = target.open(mode='r').read()

print(content)

target.unlink()

二、与os模块用法的对比

三、实战案例

对于多层文件夹的读取,用os模块只能一层一层读取出文件,要写多个for循环,效率不高,这时我们可以用 Path.glob(**/*) 大法,下面以一个实际案例来体验它的强大。

用于测试的文件夹如下:

md文件中数据如下:

需要实现将该目录下所有 md 文件的数据提取出来,并进行清洗,然后写入 csv 文件中。

# -*- coding: UTF-8 -*-

from pathlib import Path

import re

import pandas as pd

# 传入路径

p = Path(r'.\微博热搜数据\热搜数据/')

# 得到该文件目录下所有 .md文件

file_list = list(p.glob('**/*.md'))

print(f'读取md文件数量:{len(file_list)}')

for item in file_list:

print(item)

# 每天有两条热搜汇总 11点 23点 会有重合数据 去重

filelist = list(filter(lambda x: str(x).find('23点') >= 0, file_list))

sum_list = []

i = 0

for file in filelist:

# 遍历出每一个md文件 读取数据

with file.open(encoding='utf-8') as f:

lines = f.readlines()

lines = [i.strip() for i in lines] # 去除空字符

data = list(filter(None, lines)) # 去除掉列表中的空子串

data = data[1:101]

con = data[::2] # 热搜内容

rank = data[1::2] # 热度

date = re.findall('年(.+)2', str(file)) * len(con)

for m in range(len(con)):

con[m] = con[m].split('、')[-1] # 字符串操作

for n in range(len(rank)):

rank[n] = re.findall(r'\d+', rank[n])[0]

con_dic = {'日期': date, '热搜内容': con, '热度': rank}

df = pd.DataFrame(con_dic)

if i == 0:

df.to_csv('weibo1.csv', mode='a+', index=False, header=True)

else:

df.to_csv('weibo1.csv', mode='a+', index=False, header=False)

# 每个md文件中有50条数据

i += 50

print('共{}条数据写入csv'.format(i))

运行效果如下:

可以看到成功将该目录下所有 md 文件的数据提取出来,并进行清洗,然后写入了 csv 文件中。

注意:如果你是打算找python高薪工作的话。我建议你多写点真实的企业项目积累经验。不然工作都找不到,当然很多人没进过企业,怎么会存在项目经验呢? 所以你得多找找企业项目实战多练习下撒。如果你很懒不想找,也可以进我的Python交流圈:1156465813。群文件里面有我之前在做开发写过的一些真实企业项目案例。你可以拿去学习,不懂都可以在裙里找我,有空会耐心给你解答下。

以下内容无用,为本篇博客被搜索引擎抓取使用

(* ̄︶ ̄)(* ̄︶ ̄)(* ̄︶ ̄)(* ̄︶ ̄)(* ̄︶ ̄)(* ̄︶ ̄)(* ̄︶ ̄)(* ̄︶ ̄)

python 是干什么的 零基础学 python 要多久 python 为什么叫爬虫

python 爬虫菜鸟教程 python 爬虫万能代码 python 爬虫怎么挣钱

python 基础教程 网络爬虫 python python 爬虫经典例子

python 爬虫

(* ̄︶ ̄)(* ̄︶ ̄)(* ̄︶ ̄)(* ̄︶ ̄)(* ̄︶ ̄)(* ̄︶ ̄)(* ̄︶ ̄)(* ̄︶ ̄)

以上内容无用,为本篇博客被搜索引擎抓取使用

python体验课是上纯代码_附实战代码|告别OS模块,体验Python文件操作新姿势!...相关推荐

  1. python体验课是上纯代码_大陈教初中生学Python,入门体验第二课教学设计,溯本追源...

    第一课我们已经对Python有了一定的了解,那么接下来再通过补充程序.改正程序.编写程序,和学生一起明确变量.常量.表达式.数据类型.赋值语句.输入输出语句.数据类型转换函数.算术运算符等基础知识,溯 ...

  2. Python文件处理os模块介绍 -*- Python基础知识12 -*-

    文件处理 打开文件 open file mode encoding 操作文件 读取文档 逐个读取read 逐行读取 文件读取位置 写入文档 write 关闭文件 close with... as... ...

  3. python读取文件夹下特定的文件_python os模块获取指定文件夹下所有文件名

    本文采用os.walk()和os.listdir()两种方法,获取指定文件夹下的文件名. python os模块获取指定文件夹下所有文件名 第一种方法使用os.walk(): os.walk() 方法 ...

  4. python 文件操作的模块_Python之文件操作修改模块

    1.使用OS模块进行path路径操作 操作的语法为os.path.方法名(): import os # 首先导入os模块 *abspath()方法:获取当前文件的全路径,所带参数为file: file ...

  5. python 中文件输入输出及os模块对文件系统的操作

    整理了一下python 中文件的输入输出及主要介绍一些os模块中对文件系统的操作. 文件输入输出 1.内建函数open(file_name,文件打开模式,通用换行符支持),打开文件返回文件对象. 2. ...

  6. c++hello world代码_在 Rust 代码中编写 Python 是种怎样的体验?

    作者 | Mara Bos,Rust资深工程师译者 | Arvin 责编 | 屠敏头图 | CSDN 下载自东方 IC出品 | CSDN(ID:CSDNnews) 以下为译文: 大约一年前,我发布了一 ...

  7. c++hello world代码_在Rust代码中编写Python是种怎样的体验?

    作者 | Mara Bos,Rust资深工程师译者 | Arvin,编辑 | 屠敏来源 | CSDN(ID:CSDNnews)大约一年前,我发布了一个名为inline-python(https://c ...

  8. python能在ipad上运行吗_如何用iPad运行Python代码?

    其实,不只是iPad,手机也可以. 痛点 我组织过几次线下编程工作坊,带着同学们用Python处理数据科学问题. 其中最让人头疼的,就是运行环境的安装. 实事求是地讲,参加工作坊之前,我已经做了认真准 ...

  9. python动态更新窗口上的图片_基于Python实现matplotlib中动态更新图片(交互式绘图)...

    最近在研究动态障碍物避障算法,在Python语言进行算法仿真时需要实时显示障碍物和运动物的当前位置和轨迹,利用Anaconda的Python打包集合,在Spyder中使用Python3.5语言和mat ...

  10. python低代码_几行代码搞定ML模型,低代码机器学习Python库正式开源

    PyCaret 库支持在「低代码」环境中训练和部署有监督以及无监督的机器学习模型,提升机器学习实验的效率. 想提高机器学习实验的效率,把更多精力放在解决业务问题而不是写代码上?低代码平台或许是个不错的 ...

最新文章

  1. 面试问我,创建多少个线程合适?我该怎么说
  2. 数据清洗的基本流程_数据分析小白学习之路(三)——Excel多练熟能生巧
  3. 更新被拒绝,因为远程仓库包含您本地尚不存在的提交。这通常是因为另外
  4. Java Formatter locale()方法与示例
  5. 华为会议电脑版_大家在用什么会议产品呢? 对企业的视频会议是如何规划的?...
  6. linux-ssh免密登录
  7. paip.提升用户体验---业务SQL注入漏洞的分析与解决
  8. [Apio2012]dispatching 左偏树
  9. 第1篇:熊猫烧香之手动查杀
  10. C语言小案例_OA大典故障案例摘录【第1400篇】理光2501载体初始化
  11. 程序员价值观和网络复杂性-网络不可达排查过程
  12. hub设备_小米生态链爆品开箱,50W闪充加持,HUB扩展解锁电源新技能
  13. 直播有什么新的互动玩法?
  14. Rate limit bypas
  15. 新闻主题分类任务——torchtext 库进行文本分类
  16. NLP学习(一)基础篇
  17. Kotlin学习笔记
  18. 【C++】继承(C++重中之重)(学习与复习兼顾)
  19. 解决matlab中文乱码问题
  20. 基于JAVA大学生个人博客网站计算机毕业设计源码+系统+lw文档+部署

热门文章

  1. 伺服驱动器cn1引脚定义_台达A2 A3系列伺服CN1接线对照表
  2. 行为模型、价值模型、市场模型
  3. 惠普136a芯片清零_怎么把惠普打印机芯片清零
  4. 如何快速实现自定义sql分页?若不会,我便手把手教你【详细】
  5. linux操作系统shell脚本编程实验报告,Linux操作系统实验报告|linux实验报告总结
  6. 国产奶粉争上游,“河北奶王”君乐宝出了一半力
  7. 【韩顺平 零基础30天学会Java】(第三阶段)(自用)
  8. angular的运行机制_Angular开发实践(二):HRM运行机制
  9. 使用AIDL挂断电话
  10. 硅谷新传奇Kevin Systrom