# pycrtool **Repository Path**: lgcr837/pycrtool ## Basic Information - **Project Name**: pycrtool - **Description**: 一个功能丰富且使用简单的 Python 第三方模块。 - **Primary Language**: Unknown - **License**: MIT - **Default Branch**: main - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 0 - **Forks**: 0 - **Created**: 2025-07-18 - **Last Updated**: 2026-02-15 ## Categories & Tags **Categories**: Uncategorized **Tags**: None ## README # pycrtool [![MIT License](https://img.shields.io/badge/License-MIT-blue.svg)](https://opensource.org/licenses/MIT) [![Python Version](https://img.shields.io/badge/Python-3.6+-brightgreen.svg)](https://www.python.org/) [![Code Style](https://img.shields.io/badge/Code%20Style-PEP8-orange.svg)](https://peps.python.org/pep-0008/) [![Maintenance](https://img.shields.io/badge/Maintenance-Active-success.svg)]() --- ## 📖 项目简介 pycrtool 是一款开箱即用的 Python 工具集,一站式整合了终端命令执行、智能字符串处理、轻量化数据库操作、全品类排序算法、常用数学计算、合规网络爬虫等高频开发能力。旨在帮开发者告别重复造轮子,用极简的API完成复杂操作,大幅提升日常开发效率。 --- ## ✨ 核心亮点 - 🚀 **极简API**:所有功能均为静态/实例化一行调用,无需复杂配置,新手也能快速上手 - 🎯 **场景全覆盖**:从终端操作、文本处理,到数据库、算法、爬虫,覆盖80%日常开发高频需求 - 📦 **开箱即用**:所有方法均做了异常兼容与边界处理,复制示例即可运行 - 📚 **文档完善**:全API带参数说明、返回值、可运行示例,无使用门槛 --- ## ⚡ 30秒快速上手 复制以下代码,直接运行即可体验核心功能 ```python import pycrtool # 1. 终端命令执行(实时获取输出) cmd = pycrtool.run_command("echo hello pycrtool") while not cmd.get_con(): print(cmd.get_part(), end="") # 2. 智能字符串批量替换 text = "今天吃了苹果和小米" replace_map = {"苹果": "香蕉", "小米": "大米"} new_text = pycrtool.modern_replace.dict_replace(text, replace_map) print("\n替换结果:", new_text) # 3. 快速排序 arr = [9, 3, 7, 1, 4] sorted_arr = pycrtool.sort.quick_sort(arr) print("排序结果:", sorted_arr) # 4. 质数判断 print("17是否为质数:", pycrtool.suan.is_prime(17)) ``` --- ## 📦 安装说明 根据你的使用场景,选择对应的安装方式: ### 完整安装(推荐,包含全部功能) ```bash python -m pip install requests beautifulsoup4 ``` ### 最小安装(仅使用标准库功能) 无需额外安装第三方库,直接导入即可使用以下模块: - 终端命令执行 `run_command` - 字符串处理 `modern_replace` / `modern_str` - 排序算法 `sort` - 数学计算 `suan` - SQLite3 数据库 `simple_sqlite3` --- ## 📚 核心API文档 ### 1. run_command 实时终端命令执行 **适用场景**:执行系统终端命令,实时获取输出流,无需等待命令执行完成 > ⚠️ 安全提示:`shell=True` 存在命令注入风险,请勿执行不可信的外部输入命令 | 方法 | 参数说明 | 返回值 | 功能描述 | |------|----------|--------|----------| | `run_command(command)` | `command`:待执行的终端命令字符串 | 类实例 | 初始化实例并启动命令执行,自动开启子线程监听stdout/stderr | | `get_part()` | 无 | 字符串 | 获取自上次调用后**新增的增量输出**,适合实时打印 | | `get_con()` | 无 | 布尔值 | 检测命令执行状态:执行完成返回 `True`,运行中返回 `False` | | `get_all()` | 无 | 字符串 | 获取命令执行至今的**全量输出** | **完整示例** ```python import pycrtool # Windows示例,Linux/macOS替换为 ls /home cmd = pycrtool.run_command("dir C:\\Users") # 实时打印输出 while not cmd.get_con(): print(cmd.get_part(), end="") # 执行完成后统计输出 full_log = cmd.get_all() print(f"\n✅ 命令执行完成,总输出长度:{len(full_log)} 字符") ``` --- ### 2. modern_replace 智能字符串替换 **适用场景**:替代原生`replace()`,实现批量替换、交叉替换、指定次数替换等高级操作 | 方法 | 参数说明 | 返回值 | 功能描述 | |------|----------|--------|----------| | `dict_replace(text, replacements, regex=False)` | `text`:原始文本
`replacements`:替换字典{旧值: 新值}
`regex`:是否启用正则模式,默认`False` | 处理后的字符串 | 按字典批量替换,支持正则表达式高级匹配 | | `cross_replace(text, a, b)` | `text`:原始文本
`a`/`b`:待交叉替换的两个字符串 | 处理后的字符串 | 双向交叉替换,同时将a替换为b、b替换为a | | `count_replace(text, a, b, count=-1)` | `text`:原始文本
`a`:待替换内容
`b`:替换内容
`count`:替换次数,默认`-1`(全量替换) | 处理后的字符串 | 循环替换指定次数,解决嵌套替换场景 | **完整示例** ```python import pycrtool # 1. 字典批量替换(正则模式) text = "我的手机号是13812345678,工号是2024001" replace_map = { r"1[3-9]\d{9}": "【手机号脱敏】", r"\d{7}": "【工号脱敏】" } desensitized_text = pycrtool.modern_replace.dict_replace(text, replace_map, regex=True) print("脱敏结果:", desensitized_text) # 2. 交叉替换 text = "男生穿蓝色 女生穿粉色" swap_text = pycrtool.modern_replace.cross_replace(text, "蓝色", "粉色") print("交叉替换结果:", swap_text) # 3. 指定次数替换 print("全量替换:", pycrtool.modern_replace.count_replace("aaaaaa", "aa", "a")) print("2次替换:", pycrtool.modern_replace.count_replace("aaaaaa", "aa", "a", count=2)) ``` --- ### 3. modern_str 高效字符串管理 **适用场景**:字符串格式化、长度补全,适配日志打印、表格输出等对齐场景 | 方法 | 参数说明 | 返回值 | 功能描述 | |------|----------|--------|----------| | `add_text(text, text_len, add_str=" ")` | `text`:原始文本
`text_len`:目标总长度
`add_str`:用于补全的字符串,默认空格 | 处理后的字符串 | 在文本末尾追加内容,使其达到指定长度,支持多字符补全 | **示例** ```python import pycrtool # 日志对齐场景 log_list = [ ("INFO", "服务启动成功"), ("ERROR", "数据库连接失败"), ("WARN", "内存占用过高") ] for level, msg in log_list: level_fixed = pycrtool.modern_str.add_text(level, 5) print(f"[{level_fixed}] {msg}") ``` --- ### 4. simple_sqlite3 轻量化SQLite3操作 **适用场景**:本地数据存储,无需安装数据库服务,零配置实现增删改查,告别手写原生SQL | 方法 | 参数说明 | 功能描述 | |------|----------|----------| | `simple_sqlite3(db_name)` | `db_name`:数据库文件路径 | 初始化实例,自动连接数据库 | | `create_table(table_name, columns)` | `table_name`:表名
`columns`:字典{列名: 数据类型} | 自动建表(不存在时创建) | | `insert(table_name, data)` | `table_name`:表名
`data`:字典{列名: 插入值} | 插入单条数据,自动参数化防注入 | | `select(table_name, columns='*', condition=None)` | `table_name`:表名
`columns`:查询列,默认`*`
`condition`:WHERE筛选条件 | 查询数据,返回结果列表 | | `update(table_name, data, condition)` | `table_name`:表名
`data`:字典{列名: 更新值}
`condition`:更新条件 | 按条件更新数据 | | `delete(table_name, condition)` | `table_name`:表名
`condition`:删除条件 | 按条件删除数据 | | `close()` | 无 | 关闭数据库连接,释放资源 | **完整示例** ```python import pycrtool # 初始化数据库 db = pycrtool.simple_sqlite3('school.db') # 建表 db.create_table( table_name='students', columns={ 'id': 'INTEGER PRIMARY KEY AUTOINCREMENT', 'name': 'TEXT NOT NULL', 'age': 'INTEGER', 'class': 'TEXT' } ) # 插入数据 db.insert('students', {'name': '张三', 'age': 18, 'class': '高一1班'}) db.insert('students', {'name': '李四', 'age': 17, 'class': '高一2班'}) # 查询数据 result = db.select('students', columns='name,age', condition="age >= 18") print("成年学生:", result) # 更新数据 db.update('students', {'class': '高一3班'}, condition="name = '李四'") # 删除数据 db.delete('students', condition="age < 16") # 关闭连接 db.close() ``` > 💡 最佳实践:批量插入数据时,可多次调用`insert`后再统一`commit`,大幅提升写入性能 --- ### 5. sort 全品类排序算法 **适用场景**:算法学习、数据排序,覆盖主流排序算法,开箱即用,支持所有可比较类型的列表 | 算法方法 | 时间复杂度(平均) | 空间复杂度 | 稳定性 | 适用场景 | |----------|------------------|------------|--------|----------| | `bubble_sort(arr)` | O(n²) | O(1) | 稳定 | 小规模数据、教学场景 | | `selection_sort(arr)` | O(n²) | O(1) | 不稳定 | 小规模数据、交换成本高的场景 | | `insertion_sort(arr)` | O(n²) | O(1) | 稳定 | 近乎有序的小规模数据 | | `quick_sort(arr)` | O(nlogn) | O(logn) | 不稳定 | 大规模通用数据排序 | | `merge_sort(arr)` | O(nlogn) | O(n) | 稳定 | 大规模数据、要求稳定排序 | | `heap_sort(arr)` | O(nlogn) | O(1) | 不稳定 | 大规模数据、内存受限场景 | | `counting_sort(arr)` | O(n+k) | O(n+k) | 稳定 | 数值范围小的整数数组 | | `bucket_sort(arr)` | O(n+k) | O(n+k) | 稳定 | 均匀分布的浮点数据 | | `monkey_sort(arr)` | O(n!×n) | O(1) | 不稳定 | 趣味教学,请勿用于生产环境 | **示例** ```python import pycrtool arr = [6, 2, 8, 1, 9, 3, 5] # 快速排序(通用首选) print("快速排序:", pycrtool.sort.quick_sort(arr)) # 归并排序(稳定排序) print("归并排序:", pycrtool.sort.merge_sort(arr)) ``` --- ### 6. suan 常用数学计算工具集 **适用场景**:补充Python标准库`math`未覆盖的高频数学计算,极简调用 | 方法 | 参数说明 | 返回值 | 功能描述 | |------|----------|--------|----------| | `is_prime(n)` | `n`:待判断的正整数 | 布尔值 | 高效判断一个数是否为质数 | | `factorial(n)` | `n`:非负整数 | 整数 | 计算n的阶乘,支持大数运算 | | `pythagoras(a=None, b=None, c=None)` | `a`/`b`:直角边
`c`:斜边 | 浮点数 | 已知任意两边,自动计算勾股定理第三边 | **示例** ```python import pycrtool print("97是否为质数:", pycrtool.suan.is_prime(97)) print("10的阶乘:", pycrtool.suan.factorial(10)) print("直角边3、4的斜边:", pycrtool.suan.pythagoras(a=3, b=4)) print("斜边5、直角边3的另一条直角边:", pycrtool.suan.pythagoras(a=3, c=5)) ``` --- ### 7. crawl 合规网络爬虫工具 **适用场景**:快速获取网络公开信息,内置Bing搜索接口,无需手写解析逻辑 > ⚠️ 合规提示:使用本工具请严格遵守目标网站的`robots.txt`协议、相关法律法规,仅用于爬取公开可访问的非涉密信息 | 方法 | 参数说明 | 返回值 | 功能描述 | |------|----------|--------|----------| | `bing_search(query, url_start="...", url_end="")` | `query`:搜索关键词
`url_start`/`url_end`:自定义搜索链接前后缀 | 二维列表`[[标题, 链接, 摘要], ...]` | 调用Bing搜索,自动解析标题、链接、摘要,返回结构化结果 | **示例** ```python import pycrtool # 执行搜索 search_results = pycrtool.crawl.bing_search("Python 最佳实践") # 打印前5条结果 for i, (title, link, summary) in enumerate(search_results[:5], 1): print(f"\n{i}. {title}") print(f" 链接:{link}") print(f" 摘要:{summary}") ``` --- ## 🛠️ 最佳实践与注意事项 1. **终端命令执行**: - 执行长耗时命令时,优先使用`get_part()`实时打印输出,避免程序假死 - 跨平台使用时,注意Windows与Linux/macOS的命令差异 - 中文乱码可在`subprocess.Popen`中补充`encoding='utf-8'`参数 2. **数据库操作**: - 程序结束前必须调用`close()`关闭数据库连接,避免数据库锁死 - 所有操作均已做参数化处理,可有效防止SQL注入 - 大批量写入时,建议批量操作后统一提交,提升性能 3. **爬虫使用**: - 建议添加请求间隔,避免高频请求给目标服务器造成压力 - 生产环境使用时,建议在请求中添加`User-Agent`请求头,降低被反爬概率 --- ## ❓ 常见问题FAQ 1. **Q:导入模块提示`ModuleNotFoundError`?** A:请确认已安装对应依赖 2. **Q:`run_command`执行命令没有输出?** A:请确认命令本身可正常执行,Windows系统注意路径转义(使用`\\`或原始字符串`r""`) 3. **Q:SQLite3操作提示`database is locked`?** A:这是因为数据库连接未正常关闭,或多线程同时写入导致。确保每次操作后调用`close()`,避免多线程并发写入 4. **Q:排序算法传入字符串列表可以用吗?** A:所有排序算法均支持Python可比较类型,包括字符串、数字等,只要列表内元素类型一致即可正常使用 --- ## 📄 许可证 本项目采用 **MIT 许可证** 开源,完整许可证内容如下: ``` MIT License Copyright (c) 2026 LGCR837 Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions: The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. ```