python操作文件
压缩方式
gz: 即gzip。通常仅仅能压缩一个文件。与tar结合起来就能够实现先打包,再压缩。
tar: linux系统下的打包工具。仅仅打包。不压缩
tgz:即tar.gz。先用tar打包,然后再用gz压缩得到的文件
zip: 不同于gzip。尽管使用相似的算法,能够打包压缩多个文件。只是分别压缩文件。压缩率低于tar。
rar:打包压缩文件。最初用于DOS,基于window操作系统。
压缩率比zip高,但速度慢。随机访问的速度也慢。
一、python解压文件
import os
import tarfile
import zipfile
import rarfile
def uncompress(src_file, dest_dir):
"""解压各种类型的压缩包
:param src_file: 你要解压的压缩包文件
:type src_file: file
:param dest_dir: 你要解压到的目标路径
:type dest_dir: str
"""
file_name, file_type = os.path.splitext(src_file)
try:
if file_type == '.zip':
# 需要安装zip包:pip install zipp
zip_file = zipfile.ZipFile(src_file)
for names in zip_file.namelist():
print(names)
zip_file.extract(names, dest_dir)
zip_file.close()
elif file_type == '.rar':
# 需要安装rar包:pip install rarfile
rar = rarfile.RarFile(src_file)
os.chdir(dest_dir)
rar.extractall()
rar.close()
else:
# file_type == '.tgz' or file_type == '.tar' or file_type == '.gz'
# Python自带tarfile模块
tar = tarfile.open(fileobj=src_file)
for name in tar.getnames():
tar.extract(name, dest_dir)
tar.close()
except Exception as e:
_ = e
return False
return True
二、python压缩文件
2.1、zip
def zip_files(files, zip_name):
"""
压缩文件
:param files: 待压缩文件
:param zip_name: 压缩文件名及路径
:return:
"""
zip_ = zipfile.ZipFile(zip_name, 'w', zipfile.ZIP_DEFLATED)
zip_.write(files)
zip_.close()
2.2、tar
import tarfile
import os
import time
def tar(path, file_name):
"""
tar压缩文件
:param path: 待压缩文件路径
:param file_name: 压缩后的文件路径名
:return:
"""
tar_resource = tarfile.open(file_name, 'w')
for root, dir, files in os.walk(path):
for file in files:
full_path = os.path.join(root, file)
tar_resource.add(full_path, arcname=file)
tar_resource.close()
三、操作文件
3.1、遍历文件
import os
for root, dirs, files in os.walk(r'path'):
3.2、移动文件
import shutil
shutil.move(old_path, new_path)
3.3、删除文件夹
import shutil
shutil.rmtree(root)
3.4、清理空文件夹和空文件
# -*- coding: utf-8 -*-
import os # 引入文件操作库
def deldir(path):
"""
清理空文件夹和空文件
param path: 文件路径,检查此文件路径下的子文件
"""
try:
files = os.listdir(path) # 获取路径下的子文件(夹)列表
print (files)
for file in files:
print ('遍历路径:'+os.fspath(path +'/'+ file))
if os.path.isdir(os.fspath(path+'/'+file)): # 如果是文件夹
print (file+'是文件夹')
if not os.listdir(os.fspath(path+'/'+file)): # 如果子文件为空
print (file+'是空文件夹,即将执行删除操作')
os.rmdir(os.fspath(path+'/'+file)) # 删除这个空文件夹
else:
print (file+'不是空文件夹')
deldir(os.fspath(path+'/'+file)) # 遍历子文件
if not os.listdir(os.fspath(path+'/'+file)): # 如果子文件为空
print (file+'是空文件夹,即将执行删除操作')
os.rmdir(os.fspath(path+'/'+file)) # 删除这个空文件夹
elif os.path.isfile(os.fspath(path+'/'+file)): # 如果是文件
print(file+'是文件')
if os.path.getsize(os.fspath(path+'/'+file)) == 0: # 文件大小为0
print (file+'是空文件,即将执行删除操作!')
os.remove(os.fspath(path+'/'+file)) # 删除这个文件
return
except FileNotFoundError:
print ("文件夹路径错误")
3.5、复制文件
import shutil
shutil.copy(old_path, new_path)