一、os模块

os模块:是python是系统交互的模块

  1. import os
  2. # 0平台信息的一些操作
  3. python是夸平台的,所以内部兼容了不同的平台
  4. 1. os.name # 操作系统 nt是win
  5. 2. os.sep # 路径的分隔符。 win是'\\' linux是’/‘
  6. 3. os.environ # 获取环境变量
  7. os.getenv('PATH') # 获取指定的环境变量,设置自己扩展
  8.  
  9. # 1切换工作路径
  10. 文件的创建,修改等都是在工作路径下进行的
  11. win下有两种切换路径的方式:
  12. 1. r'd:\python\liv' # 使用原生字符串避免转义
  13. 2. 'd:\\python\\liv' # 使用\\进行转义
  14. os.getcwd() # 获取当前工作路径
  15. os.chdir('d:\\python') # 更改当前的工作路径
  16. os.getcwd() # 获取当前工作路径,查看变化
  17.  
  18. # 2 执行系统命令
  19. 执行系统命令os有两个方法:
  20. system 无返回值
  21. popen 有返回值
  22. os.system('dir') # 直接打印使用窗口自带编码
  23. r = os.popen('dir') # 存储到r中
  24. r.read() # 通过r来读取,自己转码
  25.  
  26. # 3.目录操作
  27. # 创建
  28. os.mkdir('test') # 只能生成一个文件夹
  29. os.mkdir(r'.\test\1')
  30. os.makedirs(r'test2\1\2') # 递归创建,全部文件都存在则报错
  31. os.mkkedirs(r'test2\1\2') # 文件存在不报错,就不会创建了
  32.  
  33. # 重命名
  34. os.rename('test', 'lh') # 文件夹重命名
  35.  
  36. # 删除
  37. os.rmdir('test/1') # 删除单个文件夹,文件夹为空时才能删除,一般先删文件,再山文件夹
  38. os.removedirs('test/1/2/3') # 删除一个文件夹时,如果上级为空,就一起删除,递归上去
  39.  
  40. os.remove('tste2\1\2\3\1.txt') # 删除单个文件
  41.  
  42. #4. 子目录操作
  43. os.listdir() # 列出工作目录(或其他路径)下的文件与文件夹
  44.  
  45. 5. 获取文件或目录信息
  46. os.stat('temp') # 获取文件的大小,各种时间,组信息等
  47. #st_atime: 上次访问的时间。
  48. #st_mtime: 最后一次修改的时间。
  49. #st_ctime: 由操作系统报告的"ctime"。在某些系统上(如Unix)是最新的元数据更改的时间,
  50. #在其它系统上(如Windows)是创建时间(详细信息参见平台的文档)。
    os.path.getsize()
    os.path.isdir()
    os.paht.isfile()

  51. #6. 路径相关path
  52. pathos包中的一个子类:
  53.  
  54. # 路径拼接
  55. a = os.path.join(os.getcwd(),'test') # 拼接路径
  56. os.path.exists(a) # 判断路径是否存在
  57. os.path.isdir(a) # 判断是否是一个文件夹
  58.  
  59. # 绝对路径和相对路径
  60. os.path.abspath('.') # 获取绝对路径
  61. os.path.isabs('.') # 判断是否为绝对路径,不存在也可以
  62. os.path.relpath(a,b) # 返回一个以b为绝对路径,a在b中的相对路径;以b为基准
  63. os.path.relpath(r'C:\Users\LH\tste2\1\2\3.txt',r'C:\Users\LH\tste2\1\2\3\2.txt')
  64.  
  65. # 路径分割
  66. a = r'C:\Users\LH\tste2\1\2\3'
  67. a.split('\\') # 在跨平台,只能手动来搞,使用字符串的方法来分割
  68. a.split(os.sep) # 兼容跨平台,使用os.sep来分割,推荐使用这种
  69.  
  70. os.path.split(a) # 分割最后一个元素,不管是文件还是文件夹
  71. os.path.splitext(a) # 分割后缀名,如果无后缀名则为空
  72. os.path.splitdive(a)# 分割盘符
  73. os.path.dirname(a) # 返回文件夹名字
  74. os.path.basename(a) # 放回最后一个名字(文件或文件夹)
  1. shutil 模块
    针对os在删除目录的不是很友好,引进了一个模块,进行了一个二次封装。
  1. import shutil
  2. os.unlink == os.remove # 删除单个文件
  3. shutil.rmtree() # 删除整个目录,不管下面有没有文件
    shutil.copy()   # 拷贝文件
    shutil.copytree() # 拷贝目录,os模块中没有
  4. shutil.move() # 移动文件,

案列:

根据后缀名与大小 得出匹配的文件:

  1. import os
  2. import re
  3.  
  4. x = re.compile('(.*pdf$)|(.*txt$)|(.*exe$)')
  5.  
  6. os.chdir(r'D:\驱动人生\软件\DTLSoft')
  7. for root, dir, files in os.walk('.'):
  8. # root 路径, dir 该路径下的目录 , files 该路径下的文件
  9. for i in files:
  10. path = os.path.join(root, i)
  11. if x.search(i) and os.stat(path).st_size > 1320:
  12. print(os.stat(path).st_size, path)

二、文件的压缩:

还有一个tarfile,自己扩展

  1. # 创建压缩
  2. import zipfile
  3. lh = zipfile.ZipFile('lh.zip', 'w') # 创建写对象
  4. lh.write('1.py', compress_type=zipfile.ZIP_DEFLATED) # 使用某种算法,添加
  5. lh.write('2.py', compress_type=zipfile.ZIP_DEFLATED)
  6. lh.close()
  7.  
  8. # 查看压缩
  9. lh = zipfile.ZipFile('lh.zip', 'r')
  10. print(lh.namelist())
  11. print(lh.infolist()) # 查看文件中所有的文件信息
  12. print(lh.getinfo('1.py')) # 查看文件中指定的文件信息
  13.  
  14. import shutil
  15. shutil.copy('lh.zip', 'lh-back.zip')
  16.  
  17. # 解压缩
  18. import zipfile
  19. lh = zipfile.ZipFile('lh.zip')
  20. lh.extractall()
  21. lh.close()

三、文件名模块

fnmatch 与 glob

fnmatch

  fnmatch 是用来匹配文件名字的。支持一些简单的正则。

  原来匹配文件名,需要自己写正则来干活,用这个模块可以简单匹配出来。

  1. * matches everything
    ? matches any single character
    [seq] matches any character in seq
    [!seq] matches any char not in seq
  1. import fnmatch,os
  2. for f in os.listdir():
  3. if fnmatch.fnmatch(f, '*.txt'):
  4. print(f)
  5. elif fnmatch.fnmatch(f, '*.pdf'):
  6. print(f)

glob:

  glob是fnmatch的封装。直接路径下符合的文件名,返回一个迭代器。 使用更方便:

  继承fnmatch的正则

  1. import glob
  2. for f in glob.glob('[0-9].py'): # 当前路径
  3. print(f)
  4.  
  5. # 或

for item in glob.glob(self.source_dir+'/*.jpg'): # 自定义路径
  print(item)

四、 其他一些读写模块

4.1 pickle

  序列化,把一些字典,列表等序列化存储直接存储到硬盘,重新加载后就可以读取。

  不支持直接对象序列化(但是可以把对象存储到列表中,再进行序列化)

方法:

dumps 与 loads

  1. import pickle
  2. # 存储
  3. a = [1, 2, 3, 'a', 'b', 'c']
  4. with open('test.pkl', 'wb') as f:
  5. f.write(pickle.dumps(a))
  6.  
  7. # 加载
  8. with open('test.pkl', 'rb') as f:
  9. b = pickle.loads(f.read())
  10. print(b)

可以更近一步,直接写入文件

  1. import pickle
  2. # 存储
  3. a = [1, 2, 3, 'a', 'b', 'c']
  4. with open('test.pkl', 'wb') as f:
  5. pickle.dump(a, f)
  6. # 加载
  7. with open('test.pkl', 'rb') as f:
  8. b = pickle.load(f)
  9. print(b)

4.2 shelve

  1. A "shelf" is a persistent, dictionary-like object.
    用类似字典的方式储存任意的python的对象 (字典,列表也是对象,python一切都对象)
  1. import shelve
  2. # 存
  3. with shelve.open('1.slv') as so:
  4. so['louhui'] = '帮我存进去'
  5. so['ying'] = '我也要'
  6.  
  7. # 取
  8. with shelve.open('1.slv') as sol:
  9. print(sol['louhui'])
  10. print(sol['ying'])

4.3 IO 虚拟文件、临时文件

  当文件 不需要存盘的时候,可以使用这个。

  1. import io
  2. a_io = io.StringIO() # 生成一个IO.stringIo对象,open生成的也是io对象。可以调用IO的各种读写,定位方法
  3. a_io.write('第二行代码\n')
  4. a_io.write('第三行代码')
  5. print('我这里结束啦', file=a_io) # 利用print的file,把一些东西直接写入到这个a_io流中
  6. # print(file=a_io)
  7. content = a_io.getvalue() # 取流
  8. print(content)
  9. a_io.close()

os模块、文件压缩 、匹配文件后缀名:fnmatch glob的更多相关文章

  1. java实现批量修改指定文件夹下所有后缀名的文件为另外后缀名的代码

    java实现批量修改指定文件夹下所有后缀名的文件为另外后缀名的代码 作者:Vashon package com.ywx.batchrename; import java.io.File; import ...

  2. time | sys | os 模块,递归删除文件,项目分析

    一,复习 ''' 1.跨文件夹导包 - 不用考虑包的情况下直接导入文件夹(包)下的具体模块 2.__name__: py自执行 '__main__' | py被导入执行 '模块名' 3.包:一系列模块 ...

  3. 第十九章 Python os模块,pathlib 判断文件是目录还是文件

    OS模块 os.path.abspath() :返回path规范化的绝对路径 import sys import os BASE_DIR = os.path.dirname(os.path.dirna ...

  4. JS截取后缀名,文件全名,非后缀名的方法---收藏(冷饭_)

    <script language="javascript" type="text/javascript"> //取整个文件的路径并且把文件名赋给文件 ...

  5. c# 控制台应用程序批量修改文件夹下的后缀名(包括子文件夹)

    using System; using System.Collections.Generic; using System.IO; using System.Linq; using System.Tex ...

  6. 在有道词典程序文件夹发现一个后缀名为sql的数据库(SQLite)

    缘起 在清理电脑磁盘的时候,看一看各安装文件夹有占用了多大容量,发现有道词典居然达140MB了,于是进去看看. 发现个有趣的文件:XXX.sql. 首先我们看一看它的安装文件夹的结构: Dict └─ ...

  7. BCB中选择文件对话框TOpenDialog过滤后缀名使用方法

    BCB中使用TOpenDialog选择对话框时,直接OpenDialog->Execute()弹出的对话框是显示所有文件的,如果我们希望过滤指定的文件后缀名就需要在Execute()前做一些初始 ...

  8. OS模块中获取当前文件的绝对路径的相关方法

    os.path.realpath(__file__) 作用:获取当前执行py脚本的绝对路径(在当前工作目录下的绝对路径) __file__ : 表示当前文件的本身,一般值是当前文件的相对路径 例如: ...

  9. python zipfile 文件压缩和文件

    文件压缩 zipfile_obj = zipfile.ZipFile(zipfile_objpath, 'a', zipfile.ZIP_DEFLATED) for dirpath, dirnames ...

  10. linux文件压缩与文件夹压缩(打包)

    目录 一:linux文件压缩 1.linux常见的压缩包有哪些? 2.bzip压缩(文件) 二:打包(文件夹压缩) 1.打包命令 2.参数 3.参数解析(实战) 4.注意事项 简介: win中的压缩包 ...

随机推荐

  1. 有界、无界队列对ThreadPoolExcutor执行的影响

    本文转载自https://blog.csdn.net/kusedexingfu/article/details/72491864 Java提供了4钟线程池: newCachedThreadPool n ...

  2. Java Vertor详细介绍和使用示例

    ①对Vector有个整体认识 Vector是向量类,继承于AbstractList,实现了List,RandomAccess,Clonable这些接口. Vector继承于AbstractList,实 ...

  3. [转]关于Navicat和MYSQL字符集不统一出现的中文乱码问题

    原文链接:关于Navicat和MYSQL字符集不统一出现的中文乱码问题 最近遇到一串关于MYSQL中文乱码的问题,问题背景是这样的: 在此之前,服务器上安装好MySQL之后就立马重新配置了字符集为ut ...

  4. HDU2189 来生一起走

    好久没发博客了,最近遇到以下奇葩错误,不明觉厉,忍不住发一篇 /*母函数,因为要求的是素数,那么先打一个素数表,所有的因子都是素数构成 但是遇到一个奇葩事,当num初值取1,结果就出不来,运行了好久 ...

  5. JAVA学习笔记之图解JAVA参数传递

    今天做项目,发现了一个问题,当String作为参数传递的时候,在函数内部改变值对外部的变量值无影响,如下代码: public static void main(String[] args) { Str ...

  6. Swoole学习(六)Swoole之定时器的创建与清除

    环境:Centos6.4,PHP环境:PHP7,Swoole2.1(在指定的时间后执行函数,需要1.7.7或更高版本) <?php //----------------------------- ...

  7. Vue组件里面data为什么必须是个函数

    在创建或注册模板的时候,传入一个data属性用来绑定数据,但是在组件中,data必须是一个函数,而不能直接把对象赋值给它. export default { name:'app', data(){ r ...

  8. T-shirt again

    T-shirt again 标签(空格分隔): 软工实践 第一次获得小黄裳是在大一下的C++课上,见T-shirt 0.0... 这次在软工课上能再次获得小黄裳,是我没有想到的,个人觉得里面有蛮多的运 ...

  9. win64 Python下安装PIL出错解决2.7版本 (3.6版本可以使用)

    转自:http://blog.csdn.net/lhh31/article/details/51979293 1.软件版本 首先我先安装了 python 2.7 pip是  8.1.2 2.当我要安装 ...

  10. 修改主机hosts文件 访问外网

    参考:详解google Chrome浏览器(理论篇) 感谢原博主 Alan_beijing 的分享,博客:Alan_beijing hosts文件所在位置: a.Windows系统: C:\Windo ...