【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)