Filekits - Python文件处理工具包,提供文件读写、网络下载、文件夹操作、图片处理等常用功能
Project description
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 # 字典处理工具
📦 安装/更新
pip install --upgrade filekits
🛠️ 使用方法
1. 文件读取
读取文本文件
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 文件
from filekits.base_io import load_json, load_yaml
data = load_json('data.json')
config = load_yaml('config.yaml')
读取Excel文件
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")
读取图像文件
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
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文件
from filekits.base_io import save_json
data = {"name": "Alice", "age": 25}
save_json(data, 'data.json')
保存文本文件
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. 文件夹操作
查找文件
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')
向上查找指定文件夹
from filekits.base_io import find_parent_folder
# 从当前文件位置开始,向上查找指定名称的文件夹
# 例如查找名为 "project" 的父文件夹路径
project_path = find_parent_folder("project")
if project_path:
print(f"找到文件夹路径: {project_path}")
else:
print("未找到指定的文件夹")
清空文件夹
from filekits.base_io import clear_folder
# 清空并重新创建文件夹
clear_folder('/path/to/clean')
4. 网络文件下载
单文件下载
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)
批量下载
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
from filekits.base_io import download_encode_base64
# 下载文件并直接获取base64编码
base64_str = download_encode_base64('https://example.com/image.jpg')
# 适用于需要直接处理文件内容而不保存到本地的场景
# 如:直接上传到云存储、嵌入到HTML/CSS、API传输等
批量下载并转为Base64
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. 工具函数
字典操作
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. 图像处理
图像格式转换
from filekits.image import to_jpg
# 将PNG、GIF、WebP等格式转换为JPG
jpg_path = to_jpg('image.png', output_folder='./output', delete_origin=False)
图像裁剪
from filekits.image import crop_transparent
# 删除PNG图片的透明区域
cropped_path = crop_transparent('image.png')
# 同时转换为JPG格式(透明背景变为白色)
cropped_jpg = crop_transparent('image.png', turn_jpg=True)
图像缩放
from filekits.image import scale_image
# 将第2张图片强制缩放到和第1张图片一样大小
scale_image('reference.jpg', 'target.jpg')
图像绘制
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')
图像合成
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'])
图像信息
from filekits.image import is_dark_color
# 判断颜色是否为深色(用于文字颜色选择)
is_dark = is_dark_color([100, 100, 100]) # RGB值
📄 许可证
MIT License
Project details
Release history Release notifications | RSS feed
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distribution
filekits-0.2.17.tar.gz
(25.1 kB
view details)
Built Distribution
Filter files by name, interpreter, ABI, and platform.
If you're not sure about the file name format, learn more about wheel file names.
Copy a direct link to the current filters
filekits-0.2.17-py3-none-any.whl
(27.0 kB
view details)
File details
Details for the file filekits-0.2.17.tar.gz.
File metadata
- Download URL: filekits-0.2.17.tar.gz
- Upload date:
- Size: 25.1 kB
- Tags: Source
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/6.2.0 CPython/3.14.5
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
8d955bdcb866f754831eac83366d6d2a13c592edba410899850fc16e3b255aa1
|
|
| MD5 |
eff421add20f04af6b7ef45a858c686e
|
|
| BLAKE2b-256 |
2a13e338545c89f5b842ebed60293545013fe68e4cc0728b5f9c3d70f094222e
|
File details
Details for the file filekits-0.2.17-py3-none-any.whl.
File metadata
- Download URL: filekits-0.2.17-py3-none-any.whl
- Upload date:
- Size: 27.0 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/6.2.0 CPython/3.14.5
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
0adad31f5567e6c5c2c4b72d2f964e394cefe234c9714ebf39748ae54461274f
|
|
| MD5 |
e529d23bc2a3a600a2e4bd929a53bb83
|
|
| BLAKE2b-256 |
b7f7a1d273cdcc31caf4831d029b86909748fe59a113cf5abbc5114964595e7a
|