Files
apiautotest/common_utils/files_handle.py
2023-06-19 15:56:00 +08:00

149 lines
5.0 KiB
Python
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
# -*- coding: utf-8 -*-
# @Time : 2023/3/30 22:34
# @Author : Flora.Chen
# @File : files_handle.py
# @Software: PyCharm
# @Desc: 处理文件相关操作
import os
import zipfile
import shutil
def get_files(target, start=None, end=None):
"""
@param: target: 目标文件绝对路径
@param: start: 以什么开头,默认为空
@param: end: 以什么结尾,默认为空
获取目录下所有的文件,以列表的形式返回
"""
if os.path.isfile(target):
return []
# files返回j经过处理的文件列表
files = []
# dirpath表示获取的目录的路径以string形式返回值。
# dirnames 包含了当前dirpath路径下所有的子目录名字不包含目录路径以列表形式返回值。
# filenames包含了当前dirpath路径下所有的非目录子文件的名字不包含目录路径
for dirpath, dirnames, filenames in os.walk(target):
for filename in filenames:
file_path = os.path.abspath(os.path.join(dirpath, filename))
# 如果"start"和"end"都有值
if start and end:
# filename是以"start"且filename是以"end"结尾则追加到files
if filename.startswith(start) and filename.endswith(end):
files.append(file_path)
# 或者如果"start"有值filename是以"start"开头则追加到files
elif start and (not end):
if filename.startswith(start):
files.append(file_path)
# 或者如果"end"有值且filename是以"end"结尾则追加到files
elif end and (not start):
if filename.endswith(end):
files.append(file_path)
else:
files.append(file_path)
# 判断files列表是否为空不为空则返回files为空则返回all_files
return files
def get_newest_file(dir_path):
"""
获取目录下最新的文件
"""
if os.path.isfile(dir_path):
return None
# 获取目录下所有文件
files = os.listdir(dir_path)
# 按文件修改时间排序
sorted_files = sorted(
[(os.path.join(dir_path, file), os.path.getmtime(os.path.join(dir_path, file))) for file in files],
key=lambda x: x[1],
reverse=True
)
# 返回最新文件路径
return sorted_files[0][0]
def zip_file(in_path: str, out_path: str):
"""
压缩指定文件夹
:param in_path: 目标文件夹路径
:param out_path: 压缩文件保存路径+xxxx.zip
:return: 无
"""
# 如果传入的路径是一个目录才进行压缩操作
if os.path.isdir(in_path):
print("目标路径是一个目录,开始进行压缩......")
# 写入
zip = zipfile.ZipFile(out_path, "w", zipfile.ZIP_DEFLATED)
for path, dirnames, filenames in os.walk(in_path):
# 去掉目标跟路径,只对目标文件夹下边的文件及文件夹进行压缩
fpath = path.replace(in_path, '')
for filename in filenames:
zip.write(
os.path.join(
path, filename), os.path.join(
fpath, filename))
zip.close()
print("压缩完成!")
else:
print("目标路径不是一个目录,请检查!")
def delete_dir_file(file_path):
"""
删除指定目录下的所有文件
:param file_path: 目标文件夹路径 (存在多级路径的暂不支持)
"""
paths = os.listdir(file_path)
if paths:
print("目标目录存在文件或目录,进行删除操作")
for item in paths:
path = os.path.join(file_path, item)
# 如果目标路径是一个文件使用os.remove删除
if os.path.isfile(path):
os.remove(path)
# 如果目标路径是一个目录使用os.rmdir删除
if os.path.isdir(path):
os.rmdir(path)
else:
print("目标目录不存在文件或目录,不需要删除")
def copy_file(src_file_path, dest_dir_path):
"""
复制一个文件到另一个目录
:param: src_file_path: 源文件路径
:param: dest_dir_path: 目标文件夹路径
"""
# 判断源文件路径是否存在
if not os.path.isfile(src_file_path):
return "源文件路径不存在"
# 判断目标文件夹路径是否存在,不存在则创建
if not os.path.isdir(dest_dir_path):
os.makedirs(dest_dir_path)
# 复制文件
try:
shutil.copy(src_file_path, dest_dir_path)
return "复制成功"
except Exception as e:
return f"复制失败:{e}"
def get_file_field(file_path):
"""
获取文件名称和二进制内容
:param: file_path: 文件路径
"""
# 处理文件绝对路径
file_name = os.path.basename(file_path)
# 获取文件二进制内容
with open(file_path, 'rb') as f:
file_content = f.read()
return (file_name, file_content)