# filekits **Repository Path**: tinycen/filekits ## Basic Information - **Project Name**: filekits - **Description**: 一个快速的Python文件IO处理库 - **Primary Language**: Python - **License**: MIT - **Default Branch**: main - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 0 - **Forks**: 0 - **Created**: 2025-09-30 - **Last Updated**: 2026-05-18 ## Categories & Tags **Categories**: Uncategorized **Tags**: None ## README # FileKits - Python文件处理工具包 一个简洁高效的Python文件处理工具包,提供了文件读写、网络下载、文件夹操作、图像处理等常用功能,让文件处理变得更加简单。 ## 🚀 功能特性 - **文件读写**:支持txt、json、yaml、excel等多种格式的文件读写 - **网络下载**:支持单文件和多文件下载,自动重试机制 - **文件夹操作**:文件查找、文件夹清理等实用功能 - **数据处理**:字典工具、pandas数据处理辅助功能 - **图像处理**:支持图像格式转换、裁剪、缩放、绘制、合成等图像处理功能 ## 📁 项目结构 ``` filekits/ ├── __init__.py ├── base_io/ │ ├── __init__.py # 基础IO操作模块 │ ├── load.py # 文件读取功能 │ ├── save.py # 文件保存功能 │ ├── folder.py # 文件夹操作 │ └── down_load.py # 网络文件下载 ├── image/ │ ├── __init__.py # 图像处理模块 │ ├── convert.py # 图像格式转换 │ ├── draw.py # 图像绘制功能 │ ├── img_crop.py # 图像裁剪 │ ├── img_fill.py # 图像填充/合成 │ ├── img_info.py # 图像信息获取 │ └── img_scale.py # 图像缩放 └── utils/ ├── __init__.py # 工具模块 └── dict_util.py # 字典处理工具 ``` ## 📦 安装/更新 ```bash pip install --upgrade filekits ``` ## 🛠️ 使用方法 ### 1. 文件读取 #### 读取文本文件 ```python from filekits.base_io import load_txt # 读取txt文件为列表 text_list = load_txt('example.txt') # 读取为字符串 text_str = load_txt('example.txt', return_type="str") # 转换为小写列表 lower_list = load_txt('example.txt', lower_list=1) ``` #### 读取 JSON/YAML 文件 ```python from filekits.base_io import load_json, load_yaml data = load_json('data.json') config = load_yaml('config.yaml') ``` #### 读取Excel文件 ```python from filekits.base_io import load_excel # 读取为pandas DataFrame df = load_excel('data.xlsx', return_type="df") # 读取为openpyxl工作表 wb, sheet, rows = load_excel('data.xlsx', return_type="sheet") ``` #### 读取图像文件 ```python from filekits.base_io import load_image # 使用PIL后端读取图像(返回PIL.Image对象) img = load_image('image.jpg', backend="PIL") # 使用OpenCV后端读取图像(返回numpy数组) img_cv = load_image('image.jpg', backend="cv2") # 也可以直接传入图像对象 img_obj = load_image(pil_image_obj) # 或 load_image(cv2_image_array) ``` ### 2. 文件保存 #### 保存DataFrame ```python from filekits.base_io import save_df import pandas as pd df = pd.DataFrame({'name': ['Alice', 'Bob'], 'age': [25, 30]}) # 保存为Excel save_df(df, 'output.xlsx') # 保存为CSV save_df(df, 'output.csv') # 保存为JSON save_df(df, 'output.json') ``` #### 保存JSON文件 ```python from filekits.base_io import save_json data = {"name": "Alice", "age": 25} save_json(data, 'data.json') ``` #### 保存文本文件 ```python from filekits.base_io import save_txt # 保存列表到txt文件 my_list = ['line1', 'line2', 'line3'] save_txt(my_list, 'output.txt') # 保存字符串到txt文件 my_text = "这是一段文本内容" save_txt(my_text, 'output.txt') ``` ### 3. 文件夹操作 #### 查找文件 ```python from filekits.base_io import find_files # 查找所有jpg文件 jpg_files = find_files('/path/to/folder', '.jpg') # 查找包含特定名称的文件 specific_files = find_files('/path/to/folder', '.txt', 'log') ``` #### 向上查找指定文件夹 ```python from filekits.base_io import find_parent_folder # 从当前文件位置开始,向上查找指定名称的文件夹 # 例如查找名为 "project" 的父文件夹路径 project_path = find_parent_folder("project") if project_path: print(f"找到文件夹路径: {project_path}") else: print("未找到指定的文件夹") ``` #### 清空文件夹 ```python from filekits.base_io import clear_folder # 清空并重新创建文件夹 clear_folder('/path/to/clean') ``` ### 4. 网络文件下载 #### 单文件下载 ```python from filekits.base_io import download_file # 下载文件 file_path = download_file('https://example.com/file.jpg', './downloads') # 自定义文件名 file_path = download_file('https://example.com/file.jpg', './downloads', 'myfile.jpg') # 返回完整信息 file_path, file_name = download_file('https://example.com/file.jpg', './downloads', return_type="both") # 禁用流式下载(适用于小文件) file_path = download_file('https://example.com/file.jpg', './downloads', stream=False) ``` #### 批量下载 ```python from filekits.base_io import download_files urls = [ 'https://example.com/image1.jpg', 'https://example.com/image2.jpg' ] # 批量下载图片 file_paths = download_files(urls, './images') # 只下载特定类型文件 file_paths = download_files(urls, './downloads', extensions=['.jpg', '.png']) # 返回字典格式(包含URL信息) file_dicts = download_files(urls, './downloads', return_type="dict") # 自定义请求头 file_paths = download_files(urls, './downloads', headers={"User-Agent": "Custom/1.0"}) # 设置失败策略:跳过失败文件继续下载 file_paths = download_files(urls, './downloads', failure_policy="skip") ``` **failure_policy 参数说明:** - `"raise"`(默认):当失败次数超过3次时,抛出 `RuntimeError` 异常 - `"skip"`:当失败次数超过3次时,打印警告并继续下载后续文件 #### 下载并转为Base64 ```python from filekits.base_io import download_encode_base64 # 下载文件并直接获取base64编码 base64_str = download_encode_base64('https://example.com/image.jpg') # 适用于需要直接处理文件内容而不保存到本地的场景 # 如:直接上传到云存储、嵌入到HTML/CSS、API传输等 ``` #### 批量下载并转为Base64 ```python from filekits.base_io import batch_download_encode_base64 urls = [ 'https://example.com/image1.jpg', 'https://example.com/image2.jpg' ] # 批量下载并获取base64编码 base64_list = batch_download_encode_base64(urls) ``` ### 5. 工具函数 #### 字典操作 ```python from filekits.utils.dict_util import remove_keys data = {"name": "Alice", "age": 25, "password": "secret"} clean_data = remove_keys(data, ["password"]) # 结果: {"name": "Alice", "age": 25} ``` ### 6. 图像处理 #### 图像格式转换 ```python from filekits.image import to_jpg # 将PNG、GIF、WebP等格式转换为JPG jpg_path = to_jpg('image.png', output_folder='./output', delete_origin=False) ``` #### 图像裁剪 ```python from filekits.image import crop_transparent # 删除PNG图片的透明区域 cropped_path = crop_transparent('image.png') # 同时转换为JPG格式(透明背景变为白色) cropped_jpg = crop_transparent('image.png', turn_jpg=True) ``` #### 图像缩放 ```python from filekits.image import scale_image # 将第2张图片强制缩放到和第1张图片一样大小 scale_image('reference.jpg', 'target.jpg') ``` #### 图像绘制 ```python from filekits.image import create_rect_mask, create_polygon_mask, add_text # 绘制矩形遮罩(指定区域为白色,其余为黑色) # 当 crop_expansion > 0 时会裁剪出小图块,减少显存占用 cropped_path, area = create_rect_mask( 'image.jpg', {'startX': 100, 'startY': 100, 'endX': 300, 'endY': 300}, 'mask.jpg', './output', crop_expansion=200 ) # 绘制多边形遮罩(支持多个多边形区域) # 始终生成与原图等大的 mask,不做裁剪 polygons = [[(100, 100), (300, 100), (300, 300), (100, 300)]] mask_path = create_polygon_mask('image.jpg', polygons, 'polygon_mask.jpg', expand_px=20) # 在图像上添加文字 font_path = {'Bold': 'font_bold.ttf', 'Medium': 'font_medium.ttf'} box_infos = [{ 'text_translated': 'Hello World', 'box': [(50, 50), (200, 50), (200, 100), (50, 100)], 'width': 150, 'height': 50, 'short_side': 40 }] output_path = add_text('image.jpg', box_infos, font_path, 'output.jpg') ``` #### 图像合成 ```python from filekits.image import paste_image, paste_logo # 在指定位置粘贴图像 from PIL import Image base_img = Image.open('base.jpg') paste_img = Image.open('paste.png') result = paste_image(base_img, paste_img, (100, 100, 300, 300)) result.save('result.jpg') # 在图像四角随机添加水印 paste_logo('image.jpg', 'logo.png', 'output.jpg', choice=['top_left', 'top_right', 'bottom_left', 'bottom_right']) ``` #### 图像信息 ```python from filekits.image import is_dark_color # 判断颜色是否为深色(用于文字颜色选择) is_dark = is_dark_color([100, 100, 100]) # RGB值 ``` ## 📄 许可证 MIT License