OS & pathlib2 模块

OS & pathlib2 模块

OS

os.非path

import os

1. getcwd # 当前项目所在路径
print(os.getcwd() )  # D:\pythonProject\learning

2. chdir # 改变当前脚本工作目录
os.chdir(r"D:\a")  
print(os.getcwd())  # D:\a

3. makedirs/removedirs # 创建/删除文件夹们
os.makedirs(r'd:\a\b\c\d')  # 创建文件夹们,缺哪些补哪些
os.removedirs(r'd:\a\b\c\d')  # 删除文件夹们,非空目录无法删除

4. mkdir/rmdir # 创建/删除文件夹
os.mkdir('./abc')  # 只能创建一级目录,最后一个目录前的文件夹们必须存在
os.rmdir('./abc')  # 只能删除一级目录,非空目录无法删除

5. remove # 删除一个文件
os.remove(r'D:\pythonProject\learning\c.py')  # 删除一个文件

6. rename # 重命名
os.rename("log.log", "bbb.bbb")  # 重命名文件/目录

7. listdir # 遍历目录
print(os.listdir(path))  # 列表形式返回
# ['.idea', 'abc', 'bbb', 'bbb.bbb', 'db', 'reviewPandas.py', 'S.py', 'setting.py', 'test.py', '__pycache__']

8. os.environ # 获取系统环境变量,字典形式,key,value都是str
print(os.environ)  

9. os.system # 运行shell命令
os.system(r'C:\Users\Administrator\Desktop\1.xlsx') #通过shell打开了xlsx文件

10. os.stat # 获取文件属性
print(os.stat(r'C:\Users\Administrator\Desktop\1.xlsx'))
# os.stat_result(st_mode=33206, st_ino=22236523160347315, st_dev=4206566602, st_nlink=1, st_uid=0, st_gid=0, st_size=17561, st_atime=1616219413, st_mtime=1616219413, st_ctime=1608186284)

11. os.kill # 关闭进程 在unix平台有效
...

12. getpid/getppid # 获取进程号/获取父进程号
print(os.getpid()) 
print(os.getppid())

os.path

1. path.abspath # 绝对路径
print(os.path.abspath('.'))  # 本级绝对路径 D:\pythonProject\learning
print(os.path.abspath('..'))  # 上一级绝对路径 D:\pythonProject
print(__file__)  # 这里file打印的是当前执行文件的文件名绝对路径 D:/pythonProject/learning/S.py

2. path.split/path.splitext # 拆分文件夹名和文件名/分离出suffix后缀
print(os.path.split(r'D:\Anaconda3\condabin\123.xlsx'))  # 返回元祖(文件夹名,文件名)
# ('D:\\Anaconda3\\condabin', '123.xlsx')
print(os.path.splitext(r'D:\Anaconda3\condabin\123.xlsx'))
# ('D:\\Anaconda3\\condabin\\123', '.xlsx')

3. path.join # 拼接成绝对路径
print(os.path.join(os.getcwd(), '123.xlsx'))  # D:\pythonProject\learning\123.xlsx

4. path.dirname # 返回文件夹名
print(os.path.dirname(r'D:\Anaconda3\condabin\123.xlsx'))  # D:\Anaconda3\condabin
print(os.path.dirname(r'd:\a\b\c')) # d:\a\b

5. path.basename # 返回文件名
print(os.path.basename(r'D:\Anaconda3\condabin\123.xlsx'))  # 123.xlsx
print(os.path.basename(r'd:\a\b\c')) # c
# 结合4和5,推测底层是以右边最后一个\符号来分割dirname和basename的


# path下查看文件时间和大小属性
import datetime
def parser_timestamp(timestamp):
    '''
    将时间戳转结构化时间
    :param timestamp: 时间戳
    :return: 结构化时间
    '''
    return datetime.datetime.fromtimestamp(timestamp).strftime('%F %X')
6. path.getmtime # 文件最后修改时间
time1 = os.path.getmtime(r'D:\a\123.xlsx') # 1607996525.7312493
print(parser_timestamp(time1))  # 2021-01-31 09:19:14

7. path.getatime # 文件最后访问时间
time2 = os.path.getatime(r'D:\EricWorking\阿吉豆bom\bomsummary.xlsx')
print(parser_timestamp(time2))  # 2020-11-19 21:17:31

8. path.getctime # 返回path的创建时间,(不常用..具体参照官方解释)
time3 = os.path.getctime(r'D:\EricWorking\阿吉豆bom\bomsummary.xlsx')
print(parser_timestamp(time3))  # 2020-12-17 16:51:37

9. path.getsize # 查看文件大小,如果是文件夹返回0
print(os.path.getsize(r'D:\EricWorking\阿吉豆bom\bomsummary.xlsx'))

10. path.exists # 查看文件是否存在,返回bool
x = r'D:\EricWorking\阿吉豆bom\bomsummary22.xlsx'
print(os.path.exists(x)) # False

11. path.isfile/path.isdir/path.isabs # 判断是文件/文件夹/绝对路径?
print(os.path.isfile(x))  # 如果是存在的文件file返回True
print(os.path.isdir(x))  # 如果是存在的文件夹dir返回True
print(os.path.isabs(path))  # 是否绝对路径

# 需求:查找文件夹下最新的文件
file_list = os.listdir(r'D:\EricWorking\阿吉豆bom')
file_list.sort(key=lambda x: os.path.getmtime(os.path.join(r'D:\EricWorking\阿吉豆bom', x)))
file_list.sort(key=lambda x: os.path.getctime(os.path.join(r'D:\EricWorking\阿吉豆bom', x)))
# getctime->最新创建的文件,getmtime->最新修改的文件
print(file_list[-1])

# 需求:获得上级上级的目录
print(os.path.normpath(os.path.join(os.path.dirname(__file__), '..')))
print(os.path.dirname(os.path.dirname(__file__)))  # 推荐

# 需求:遍历文件夹内所有的文件名
import os
file = r'D:\eric'

def print_file(file):
    path = os.listdir(file)
    file_path = [os.path.join(file,i) for i in path]
    for i in file_path:
        if os.path.isdir(i):
            print_file(i)
        else:
            print(i)

print_file(file)

pathlib2 (封装了os.path)

python3.5之后推出了pathlib2模块 用来处理路径

from pathlib2 import Path

# 在没有实例化的情况下默认对象是当前程序所在目录
1. cwd/home # 返回当前工作目录路径/Home路径,cmd默认目录
print(Path.cwd())  # D:\pythonProject\learning
print(Path.home())  # C:\Users\Administrator

2. parent/parents # 父目录操作
print(Path.cwd().parent)  # 获取当前目录的父级目录
print(Path.cwd().parent.parent)  # 获取当前目录的父级的父级目录
print(Path.cwd().parent.parent.parent)  # 获取当前目录的父级的父级的父级目录
for parent in Path.cwd().parents:  # 循环遍历父级目录
    print(parent)
# 当有实例化对象的时候,得到对象的父类或者父类们目录
p = Path(r'D:\a\b\c')
print(p.parent) # D:\a\b
print(p.parents) # <WindowsPath.parents>
print([*p.parents]) # 解压后 [WindowsPath('D:/a/b'), WindowsPath('D:/a'), WindowsPath('D:/')]
    
3. name/suffix/suffixes/stem/with_name/with_suffix # 文件名操作
p = Path(r'C:\Users\Administrator\Desktop\1.xlsx')
print(p.name)  # 1.xlsx
print(p.suffix) # .xlsx
print(p.suffixes)  # ['.xlsx']
print(p.stem)  # 1
print(p.with_name('22.xlsx'))  # 用22.xlsx替换1.xlsx,生成绝对路径
# C:\Users\Administrator\Desktop\22.xlsx
print(p.with_suffix('.txt'))  # 用新扩展名.txt替换.xlsx,生成绝对路径
# C:\Users\Administrator\Desktop\1.txt

4. ,/joinpath/ / # 路径拼接和分解
print(Path(r'C:\Users', r'Administrator\Desktop', r'1.xlsx'))
print(Path(r'C:\Users', r'Administrator\Desktop').joinpath(r'1.xlsx'))
print(Path(r'C:\Users', r'Administrator\Desktop') / (r'1.xlsx'))
# C:\Users\Administrator\Desktop\1.xlsx
# C:\Users\Administrator\Desktop\1.xlsx
# C:\Users\Administrator\Desktop\1.xlsx

5. iterdir # 遍历文件夹
p = Path(r'C:\Users\Administrator\Desktop')
print(p.iterdir()) # 返回一个生成器,类似os.listdir()
print([*p.iterdir()])  # 解压 
# [WindowsPath('C:/Users/Administrator/Desktop/1.xlsx'), WindowsPath('C:/Users/Administrator/Desktop/1000篇技术博客'), WindowsPath('C:/Users/Administrator/Desktop/2.xlsx'), WindowsPath('C:/Users/Administrator/Desktop/2021target.xmind'), WindowsPath('C:/Users/Administrator/Desktop/2345看图王.lnk'), WindowsPath('C:/Users/Administrator/Desktop/360安全浏览器.lnk'), WindowsPath('C:/Users/Administrator/Desktop/desktop.ini'), WindowsPath('C:/Users/Administrator/Desktop/EnglishPractise'), WindowsPath('C:/Users/Administrator/Desktop/Matplotlib 孙兴华.xmind'), WindowsPath('C:/Users/Administrator/Desktop/test.py'), WindowsPath('C:/Users/Administrator/Desktop/好言好语'), WindowsPath('C:/Users/Administrator/Desktop/技术栈.xmind'), WindowsPath('C:/Users/Administrator/Desktop/爱奇艺.lnk'), WindowsPath('C:/Users/Administrator/Desktop/百度网盘.lnk'), WindowsPath('C:/Users/Administrator/Desktop/笔记课件'), WindowsPath('C:/Users/Administrator/Desktop/蚂蚁学python-pandas.xmind'), WindowsPath('C:/Users/Administrator/Desktop/迅雷.lnk'), WindowsPath('C:/Users/Administrator/Desktop/题目')]


# 文件操作
# 一般不用,直接with open()

6. mkdir/rmdir # 创建文件夹和删除文件夹
p = Path(r'D:\aAA\bBB')
p.mkdir(parents = True, exist_ok = True)
# parents -> 如果父目录不在创不创的开关, True->不在也创建,False->不创,报错找不到路径
# exist_ok -> 如果创建的东西已经在了是不是ok?报不报错的开关,True->ok不报错,False->报错找不到路径
p.rmdir() # 只会删除最后一层,bBB

7. is_dir/is_file/is_absolute/exists # 判断文件及文件夹属性/判断对象是否存在
p = Path(r'C:\Users\Administrator\Desktop\333.xlsx')
print(p.is_dir())  # 是否是目录
print(p.is_file())  # 是否是文件,基于文件存在并且是文件的才返回True
print(p.is_absolute())  # 是否是绝对路径
print(p.exists())  # 文件或文件夹是否存在

8. stat # 文件的信息
p = Path(r'C:\Users\Administrator\Desktop\1.xlsx')
print(p.stat())
# os.stat_result(st_mode=33206, st_ino=22236523160347315, st_dev=4206566602, st_nlink=1, st_uid=0, st_gid=0, st_size=17561, st_atime=1616219413, st_mtime=1616219413, st_ctime=1608186284)
print(p.stat().st_size)  # 根据stat的可命名元祖取文件大小 -> 17561
# 取一些其他文件信息
import datetime
print(datetime.datetime.fromtimestamp(p.stat().st_ctime)) # 2020-12-17 14:24:44.737026
  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值