【Python学习笔记】文件目录常用模块

一、OS模块

1.切换目录

import os
pwd = os.getcwd()
print(pwd)

E:\Python课程\venv\文件目录处理模块OS

==============================
import os
dir = os.chdir("E:/")
pwd = os.getcwd()
print(pwd)

E:\

2.文件重命名

import os
os.rename(r"E:\Python课程\venv\文件目录处理模块OS\ 根\二级目录1\5.html", r"E:\Python课程\venv\文件目录处理模块OS\ 根\二级目录1\1.html")
mv = os.listdir(r"E:\Python课程\venv\文件目录处理模块OS\ 根\二级目录1")
print(mv)

['1.html', '2.html']

3.删除文件

import os
os.remove(r"E:\Python课程\venv\文件目录处理模块OS\ 根\二级目录1\1.html")
rm = os.listdir(r"E:\Python课程\venv\文件目录处理模块OS\ 根\二级目录1")
print(rm)

['2.html']

4.查看目录下的文件

import os
ls = os.listdir(r"E:\Python课程\venv\文件目录处理模块OS\ 根\二级目录1")
print(ls)

['2.html']

5.递归查看目录下的的文件

import os
result = os.walk(r"E:\Python课程\venv\文件目录处理模块OS\ 根")
print(result)
print("---" * 12)
for i in result:
    print(i)
    
<generator object walk at 0x00000211CF819BA0>
------------------------------------
('E:\\Python课程\\venv\\文件目录处理模块OS\\ 根', ['二级目录1', '二级目录2', '二级目录3'], [])
('E:\\Python课程\\venv\\文件目录处理模块OS\\ 根\\二级目录1', [], ['2.html'])
('E:\\Python课程\\venv\\文件目录处理模块OS\\ 根\\二级目录2', [], ['a.html', 'b.html'])
('E:\\Python课程\\venv\\文件目录处理模块OS\\ 根\\二级目录3', [], [])

例子:显示指定路径下的所有文件,并且以绝对路径的方式显示

import os
dir = os.walk(r"E:\Python课程\venv\文件目录处理模块OS\ 根")
for i, v, h in dir:
    if len(h) > 0:
        for a in h:
            full = i + "\\" + a
            print(full)
            
E:\Python课程\venv\文件目录处理模块OS\ 根\二级目录1\2.html
E:\Python课程\venv\文件目录处理模块OS\ 根\二级目录1\file01
E:\Python课程\venv\文件目录处理模块OS\ 根\二级目录2\a.html
E:\Python课程\venv\文件目录处理模块OS\ 根\二级目录2\b.html

例子:批量重命名文件(把html格式的文件改成txt)

import os
dir = os.walk(r"E:\Python课程\venv\文件目录处理模块OS\ 根")

for i,v,h in dir:
    for H in h:
        full = i + "\\" + H
        if full.endswith("html"):
            new = full.replace("html", "txt")
            os.rename(full, new)
        print(new)
        
E:\Python课程\venv\文件目录处理模块OS\ 根\二级目录1\2.txt
E:\Python课程\venv\文件目录处理模块OS\ 根\二级目录1\2.txt
E:\Python课程\venv\文件目录处理模块OS\ 根\二级目录2\a.txt
E:\Python课程\venv\文件目录处理模块OS\ 根\二级目录2\b.txt

6.创建目录

import os
os.mkdir(r"E:\Python课程\venv\文件目录处理模块OS\ 根\docker")
dir = os.listdir(r"E:\Python课程\venv\文件目录处理模块OS\ 根")
print(dir)

['docker', '二级目录1', '二级目录2', '二级目录3']

7.判断目录是否存在

import os
dir = os.path.exists(r"E:\Python课程\venv\文件目录处理模块OS\ 根\docker")
print(dir)

True

8.判断文件类型

>>> os.path.isfile("/etc/fstab")
True
>>> os.path.isdir("/tmp")
True
>>> os.path.islink("/etc/sysconfig/selinux")
True

9.获取文件名字,或者所在目录

>>> os.path.basename("/etc/sysconfig/network-scripts/ifcfg-enp2s0")
'ifcfg-enp2s0'
>>> 
>>> os.path.dirname("/etc/sysconfig/network-scripts/ifcfg-enp2s0")
'/etc/sysconfig/network-scripts'

10.分割文件路径

>>> os.path.split("/etc/sysconfig/network-scripts/ifcfg-enp2s0")
('/etc/sysconfig/network-scripts', 'ifcfg-enp2s0')

11.获取文件的时间信息

>>> os.path.getsize("/etc/fstab")
465
>>> os.path.getatime("/etc/fstab")	#最近一次访问文件时间
1628586601.5322223	#时间戳格式,从1970年往后算
>>> os.path.getctime("/etc/fstab")	#创建时间
1621221665.6074662
>>> os.path.getmtime("/etc/fstab")	#最后一次修改时间
1621221665.5854669

二、shutil模块

1.复制文件

>>> import shutil
>>> shutil.copy("/etc/fstab", "/tmp/fstab")

2.删除目录

>>> shutil.rmtree("/tmp/AA")

三、python调用shell命令

1.os.popen(cmd)

适用于获取命令结果

import os

result = os.popen("ping baidu.com")
print(result)
print(result.read())

2.subprocess.call(命令, shell=True)

适用于获取命令的执行状态码

import subprocess

# 创建类似于/dev/null黑洞文件
null_obj = open(r"D:\project0805\files\win_null_file", mode="wb")

result = subprocess.call("ping baidu.com", shell=True, stdout=null_obj, stderr=null_obj)

print(result)
print(type(result))

统计网段内所有在线的主机

import subprocess
null_obj = open("win_null", mode="wb")

for i in range(1, 255):
    ip = "10.11.1.%s" % i
    ping_cmd = "ping -n 1 -w 1 %s" % ip
    result = subprocess.call(ping_cmd, shell=True, stdout=null_obj, stderr=null_obj)
    if result == 0:
        print("主机:%s 在线" % ip)
null_obj.close()

3.hashlib模块

实现文件md5值校验

import hashlib

md5_tool = hashlib.md5()

md5_tool.update(b"abc")
md5_tool.update(b"def")

print(md5_tool.hexdigest())
import hashlib

md5_tool = hashlib.md5()

web_log = r"D:\project0805\files\access_log"
with open(web_log, mode="rb") as fobj:
    while True:
        data = fobj.read(4096)
        if data:
            md5_tool.update(data)
        else:
            break
    print(md5_tool.hexdigest())

四、tarfile模块

实现文件打包备份
*.tar*.tar.gz*.tar.bz2

import tarfile

tar_file_name = r"D:\project0805\backup\test.tar.gz"
tar_obj = tarfile.open(tar_file_name, mode="w:gz")

tar_obj.add(r"D:\project0805\files\test01.html")	#向压缩包添加被压缩的文件
tar_obj.add(r"D:\project0805\files\test02.html")
tar_obj.add(r"D:\project0805\files\access_log")

tar_obj.close()

五、pickle模块

  • 实现持久化存储
  • 优势:保持数据类型不变

1.dump(object, file)

作用:存储数据

import pickle

data = { "martin":"redhat", "robin":"123" }
file_name = r"E:\Python课程\venv\文件目录处理模块OS\ 根\二级目录1\file01"
with open(file_name, mode="wb") as fobj:
    pickle.dump(data, fobj)

2.load(file)

作用:读取数据

import pickle

file_name = r"E:\Python课程\venv\文件目录处理模块OS\ 根\二级目录1\file01"
with open(file_name, mode="rb") as fobj:
    data = pickle.load(fobj)
print(type(data))
print(data)