python 文件操作工具类

#!/usr/bin/python
# -*- coding: UTF-8 -*-
# 文件操作类

import os
import logging
import shutil
import zipfile


def get_file_size(src):
    """ 文件大小
        Parameters
        ----------
        src : 源路径
    """
    try:
        size = os.path.getsize(src)
        return format_size(size)
    except Exception as err:
        logging.error(err)


def get_folder_size(src):
    """ 文件夹大小
        Parameters
        ----------
        src : 文件路径
    """
    sumsize = 0
    try:
        filename = os.walk(src)
        for root, dirs, files in filename:
            for fle in files:
                size = os.path.getsize(src + fle)
                sumsize += size
        return format_size(sumsize)
    except Exception as err:
        logging.error(err)


def format_size(bytes):
    """ 格式化文件大小
        Parameters
        ----------
        bytes : 字节大小
    """
    try:
        bytes = float(bytes)
        kb = bytes / 1024
    except:
        logging.error("传入的字节格式不对")
        return "Error"
    if kb >= 1024:
        M = kb / 1024
        if M >= 1024:
            G = M / 1024
            return "%fG" % (G)
        else:
            return "%fM" % (M)
    else:
        return "%fkb" % (kb)


def get_file_extension(src):
    """ 获取文件后缀名
        Parameters
        ----------
        src : 文件路径
    """
    return os.path.splitext(src)[1]


def get_file_name(src):
    """ 获取文件名
        Parameters
        ----------
        src : 文件路径
    """
    return os.path.basename(src)


def move(src, dest):
    """ 移动
        Parameters
        ----------
        src  : 文件路径
        dest : 目标路径
    """
    if not os.path.isfile(src):
        logging.error("%s not exist!" % (src))
    else:
        fpath, fname = os.path.split(dest)
        if not os.path.exists(fpath):
            os.makedirs(fpath)
        shutil.move(src, dest)
        logging.debug("move %s -> %s" % (src, dest))


def copy(src, dest):
    """ 复制
        Parameters
        ----------
        src  : 文件路径
        dest : 目标路径
    """
    if not os.path.isfile(src):
        logging.error("%s not exist!" % (src))
    else:
        fpath, fname = os.path.split(dest)
        if not os.path.exists(fpath):
            os.makedirs(fpath)
        shutil.copyfile(src, dest)
        logging.debug("copy %s -> %s" % (src, dest))


def rename(src, dest):
    """ 复制
        Parameters
        ----------
        src  : 文件路径
        dest : 目标路径
    """
    try:
        os.rename(src, dest)
    except Exception as e:
        logging.error('rename file fail\r\n %s' % e)
    else:
        logging.info('rename file success\r\n')


def remove(src):
    """ 删除
        Parameters
        ----------
        src  : 文件路径
    """
    if not os.path.isfile(src):
        logging.error("%s not exist!" % (src))
    else:
        os.remove(src)
        logging.debug("remove %s" % src)


def uncompress(src, dest):
    """ 解压缩
        Parameters
        ----------
        src  : 文件路径
        dest : 目标路径
    """
    if not os.path.isfile(src):
        logging.error("%s not exist!" % (src))
    else:
        unc = zipfile.ZipFile(src)
        unc.extractall(path=dest)
        unc.close()


def compress(src, dest, suffix='zip'):
    """ 压缩
        Parameters
        ----------
        src    : 文件路径
        dest   : 目标路径
        suffix : 压缩格式
    """
    compress = ['.zip', '.rar']
    src = os.path.abspath(src)
    suffix = '.' + suffix.lstrip('.')
    if os.path.isdir(src):
        if(os.path.splitext(dest)[1] not in compress):
            dirname = os.path.split(src)[1]
            dest = os.path.join(dest, (dirname + suffix))
        newZip = zipfile.ZipFile(dest, 'a')
        for dirpath, dirnames, filenames in os.walk(src):
            for dirname in dirnames:
                dp = filepath = os.path.join(dirpath, dirname)
                newZip.write(dp, dp[len(src):])
            for filename in filenames:
                filepath = os.path.join(dirpath, filename)
                newZip.write(filepath, filepath[len(src):])
    elif os.path.isfile(src):
        if(os.path.splitext(dest)[1] not in compress):
            filename = os.path.splitext(src)
            filename = os.path.split(filename[0])[1]
            dest = os.path.join(dest, (filename+suffix))
        newZip = zipfile.ZipFile(dest, 'a')
        newZip.write(src, src[len(os.path.split(src)[0]):])
    else:
        logging.info("%s is not supported" % src)
    newZip.close()
    logging.info('compress is successed -> %s' % dest)

  • 1
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值