# ⭐️ 简介
本库是一个基于 python 的工具集,用于记录数据到文件。
使用方便,代码简洁,是一个可靠、省心且实用的工具。
支持多线程同时写入文件。
**联系邮箱:** g1879@qq.com
**使用手册:** 📒[点击打开](https://DrissionPage.cn/DrissionRecord/)
# ✨️ 理念
简单,可靠,省心。
# 📕 背景
进行数据采集的时候,常常要保存数据到文件,频繁开关文件会影响效率,而如果等采集结束再写入,会有因异常而丢失数据的风险。
因此写了这些工具,只要把数据扔进去,它们能缓存到一定数量再一次写入,减少文件开关次数,且在程序崩溃或退出时尽量自动保存。
它们使用非常方便,无论何时何地,无论什么格式,只要使用`add_data()`方法把数据存进去即可,语法极其简明扼要,使程序员能更专注业务逻辑。
它们还相当可靠,作者曾一次过连续记录超过 300 万条数据,也曾 50 个线程同时运行写入数万条数据到一个文件,依然轻松胜任。
工具还对表格文件(xlsx、csv)做了很多优化,封装了实用功能,可以使用表格文件方便地实现断点续爬、批量转移数据、指定坐标填写数据等。
# 🍀 特性
- 可以缓存数据到一定数量再一次写入,减少文件读写次数,降低开销。
- 支持多线程同时写入数据。
- 写入时如文件打开,会自动等待文件关闭再写入,避免数据丢失。
- 对断点续爬提供良好支持。
- 可方便地批量转移数据。
- 可根据字典数据自动创建表头。
- 自动创建文件和路径,减少代码量。
# 🌠 概览
这里简要介绍各种工具用途,详细用法请查看使用方法章节。
各个工具有着相同的使用逻辑:创建对象 -> 添加数据 -> 记录数据。
## ⚡ 记录器`Recorder`
`Recorder`的功能强大直观高效实用。可以接收单行数据,或二维数据一次写入多行。
可指定坐标写入数据,也可为 xlsx 设置单元格格式、图片和链接等。
支持自动匹配表头,支持文件数据读取。
支持 csv、xlsx、json、jsonl、txt 四种格式文件。
```python
from DrissionRecord import Recorder
data = ((1, 2, 3, 4),
(5, 6, 7, 8))
r = Recorder('data.csv')
r.add_data(data) # 一次记录多行数据
r.add_data('abc') # 记录单行数据
```
## ⚡ 二进制数据记录器`ByteRecorder`
`ByteRecorder`用法最简单,它和`Recorder`类似,记录多个数据然后按顺序写入文件。
不一样的是它只接收二进制数据,每次`add_data()`只能输入一条数据,而且没有行的概念。
```python
from DrissionRecord import ByteRecorder
b = ByteRecorder('data.file')
b.add_data(b'*****************') # 向文件写入二进制数据
```
## ⚡ 数据库记录器`DBRecorder`
支持 sqlite,用法和`Recorder`一致,支持自动创建数据库、数据表、数据列。
```python
from DrissionRecord import DBRecorder
d = DBRecorder('data.db')
d.add_data({'name': '张三', 'age': 25}, table='user') # 插入数据到user表
d.record()
```
# ☕ 请我喝咖啡
如果本项目对您有所帮助,不妨请作者我喝杯咖啡 :)

Raw data
{
"_id": null,
"home_page": "https://gitcode.com/g1879/DrissionRecord",
"name": "DrissionRecord",
"maintainer": null,
"docs_url": null,
"requires_python": ">=3.6",
"maintainer_email": null,
"keywords": "DrissionRecord",
"author": "g1879",
"author_email": "g1879@qq.com",
"download_url": "https://files.pythonhosted.org/packages/2a/48/7ce367657899231303f5776b5437013f9a56cefe708d70a68ce5ee856c09/drissionrecord-1.0.0.tar.gz",
"platform": null,
"description": "# \u2b50\ufe0f \u7b80\u4ecb\r\n\r\n\u672c\u5e93\u662f\u4e00\u4e2a\u57fa\u4e8e python \u7684\u5de5\u5177\u96c6\uff0c\u7528\u4e8e\u8bb0\u5f55\u6570\u636e\u5230\u6587\u4ef6\u3002\r\n\r\n\u4f7f\u7528\u65b9\u4fbf\uff0c\u4ee3\u7801\u7b80\u6d01\uff0c\u662f\u4e00\u4e2a\u53ef\u9760\u3001\u7701\u5fc3\u4e14\u5b9e\u7528\u7684\u5de5\u5177\u3002\r\n\r\n\u652f\u6301\u591a\u7ebf\u7a0b\u540c\u65f6\u5199\u5165\u6587\u4ef6\u3002\r\n\r\n**\u8054\u7cfb\u90ae\u7bb1\uff1a** g1879@qq.com\r\n\r\n**\u4f7f\u7528\u624b\u518c\uff1a** \ud83d\udcd2[\u70b9\u51fb\u6253\u5f00](https://DrissionPage.cn/DrissionRecord/)\r\n\r\n# \u2728\ufe0f \u7406\u5ff5\r\n\r\n\u7b80\u5355\uff0c\u53ef\u9760\uff0c\u7701\u5fc3\u3002\r\n\r\n# \ud83d\udcd5 \u80cc\u666f\r\n\r\n\u8fdb\u884c\u6570\u636e\u91c7\u96c6\u7684\u65f6\u5019\uff0c\u5e38\u5e38\u8981\u4fdd\u5b58\u6570\u636e\u5230\u6587\u4ef6\uff0c\u9891\u7e41\u5f00\u5173\u6587\u4ef6\u4f1a\u5f71\u54cd\u6548\u7387\uff0c\u800c\u5982\u679c\u7b49\u91c7\u96c6\u7ed3\u675f\u518d\u5199\u5165\uff0c\u4f1a\u6709\u56e0\u5f02\u5e38\u800c\u4e22\u5931\u6570\u636e\u7684\u98ce\u9669\u3002\r\n\r\n\u56e0\u6b64\u5199\u4e86\u8fd9\u4e9b\u5de5\u5177\uff0c\u53ea\u8981\u628a\u6570\u636e\u6254\u8fdb\u53bb\uff0c\u5b83\u4eec\u80fd\u7f13\u5b58\u5230\u4e00\u5b9a\u6570\u91cf\u518d\u4e00\u6b21\u5199\u5165\uff0c\u51cf\u5c11\u6587\u4ef6\u5f00\u5173\u6b21\u6570\uff0c\u4e14\u5728\u7a0b\u5e8f\u5d29\u6e83\u6216\u9000\u51fa\u65f6\u5c3d\u91cf\u81ea\u52a8\u4fdd\u5b58\u3002\r\n\r\n\u5b83\u4eec\u4f7f\u7528\u975e\u5e38\u65b9\u4fbf\uff0c\u65e0\u8bba\u4f55\u65f6\u4f55\u5730\uff0c\u65e0\u8bba\u4ec0\u4e48\u683c\u5f0f\uff0c\u53ea\u8981\u4f7f\u7528`add_data()`\u65b9\u6cd5\u628a\u6570\u636e\u5b58\u8fdb\u53bb\u5373\u53ef\uff0c\u8bed\u6cd5\u6781\u5176\u7b80\u660e\u627c\u8981\uff0c\u4f7f\u7a0b\u5e8f\u5458\u80fd\u66f4\u4e13\u6ce8\u4e1a\u52a1\u903b\u8f91\u3002\r\n\r\n\u5b83\u4eec\u8fd8\u76f8\u5f53\u53ef\u9760\uff0c\u4f5c\u8005\u66fe\u4e00\u6b21\u8fc7\u8fde\u7eed\u8bb0\u5f55\u8d85\u8fc7 300 \u4e07\u6761\u6570\u636e\uff0c\u4e5f\u66fe 50 \u4e2a\u7ebf\u7a0b\u540c\u65f6\u8fd0\u884c\u5199\u5165\u6570\u4e07\u6761\u6570\u636e\u5230\u4e00\u4e2a\u6587\u4ef6\uff0c\u4f9d\u7136\u8f7b\u677e\u80dc\u4efb\u3002\r\n\r\n\u5de5\u5177\u8fd8\u5bf9\u8868\u683c\u6587\u4ef6\uff08xlsx\u3001csv\uff09\u505a\u4e86\u5f88\u591a\u4f18\u5316\uff0c\u5c01\u88c5\u4e86\u5b9e\u7528\u529f\u80fd\uff0c\u53ef\u4ee5\u4f7f\u7528\u8868\u683c\u6587\u4ef6\u65b9\u4fbf\u5730\u5b9e\u73b0\u65ad\u70b9\u7eed\u722c\u3001\u6279\u91cf\u8f6c\u79fb\u6570\u636e\u3001\u6307\u5b9a\u5750\u6807\u586b\u5199\u6570\u636e\u7b49\u3002\r\n\r\n# \ud83c\udf40 \u7279\u6027\r\n\r\n- \u53ef\u4ee5\u7f13\u5b58\u6570\u636e\u5230\u4e00\u5b9a\u6570\u91cf\u518d\u4e00\u6b21\u5199\u5165\uff0c\u51cf\u5c11\u6587\u4ef6\u8bfb\u5199\u6b21\u6570\uff0c\u964d\u4f4e\u5f00\u9500\u3002\r\n- \u652f\u6301\u591a\u7ebf\u7a0b\u540c\u65f6\u5199\u5165\u6570\u636e\u3002\r\n- \u5199\u5165\u65f6\u5982\u6587\u4ef6\u6253\u5f00\uff0c\u4f1a\u81ea\u52a8\u7b49\u5f85\u6587\u4ef6\u5173\u95ed\u518d\u5199\u5165\uff0c\u907f\u514d\u6570\u636e\u4e22\u5931\u3002\r\n- \u5bf9\u65ad\u70b9\u7eed\u722c\u63d0\u4f9b\u826f\u597d\u652f\u6301\u3002\r\n- \u53ef\u65b9\u4fbf\u5730\u6279\u91cf\u8f6c\u79fb\u6570\u636e\u3002\r\n- \u53ef\u6839\u636e\u5b57\u5178\u6570\u636e\u81ea\u52a8\u521b\u5efa\u8868\u5934\u3002\r\n- \u81ea\u52a8\u521b\u5efa\u6587\u4ef6\u548c\u8def\u5f84\uff0c\u51cf\u5c11\u4ee3\u7801\u91cf\u3002\r\n\r\n# \ud83c\udf20 \u6982\u89c8\r\n\r\n\u8fd9\u91cc\u7b80\u8981\u4ecb\u7ecd\u5404\u79cd\u5de5\u5177\u7528\u9014\uff0c\u8be6\u7ec6\u7528\u6cd5\u8bf7\u67e5\u770b\u4f7f\u7528\u65b9\u6cd5\u7ae0\u8282\u3002\r\n\r\n\u5404\u4e2a\u5de5\u5177\u6709\u7740\u76f8\u540c\u7684\u4f7f\u7528\u903b\u8f91\uff1a\u521b\u5efa\u5bf9\u8c61 -> \u6dfb\u52a0\u6570\u636e -> \u8bb0\u5f55\u6570\u636e\u3002\r\n\r\n## \u26a1 \u8bb0\u5f55\u5668`Recorder`\r\n\r\n`Recorder`\u7684\u529f\u80fd\u5f3a\u5927\u76f4\u89c2\u9ad8\u6548\u5b9e\u7528\u3002\u53ef\u4ee5\u63a5\u6536\u5355\u884c\u6570\u636e\uff0c\u6216\u4e8c\u7ef4\u6570\u636e\u4e00\u6b21\u5199\u5165\u591a\u884c\u3002\r\n\r\n\u53ef\u6307\u5b9a\u5750\u6807\u5199\u5165\u6570\u636e\uff0c\u4e5f\u53ef\u4e3a xlsx \u8bbe\u7f6e\u5355\u5143\u683c\u683c\u5f0f\u3001\u56fe\u7247\u548c\u94fe\u63a5\u7b49\u3002\r\n\r\n\u652f\u6301\u81ea\u52a8\u5339\u914d\u8868\u5934\uff0c\u652f\u6301\u6587\u4ef6\u6570\u636e\u8bfb\u53d6\u3002\r\n\r\n\u652f\u6301 csv\u3001xlsx\u3001json\u3001jsonl\u3001txt \u56db\u79cd\u683c\u5f0f\u6587\u4ef6\u3002\r\n\r\n```python\r\nfrom DrissionRecord import Recorder\r\n\r\ndata = ((1, 2, 3, 4), \r\n (5, 6, 7, 8))\r\n\r\nr = Recorder('data.csv')\r\nr.add_data(data) # \u4e00\u6b21\u8bb0\u5f55\u591a\u884c\u6570\u636e\r\nr.add_data('abc') # \u8bb0\u5f55\u5355\u884c\u6570\u636e\r\n```\r\n\r\n## \u26a1 \u4e8c\u8fdb\u5236\u6570\u636e\u8bb0\u5f55\u5668`ByteRecorder`\r\n\r\n`ByteRecorder`\u7528\u6cd5\u6700\u7b80\u5355\uff0c\u5b83\u548c`Recorder`\u7c7b\u4f3c\uff0c\u8bb0\u5f55\u591a\u4e2a\u6570\u636e\u7136\u540e\u6309\u987a\u5e8f\u5199\u5165\u6587\u4ef6\u3002\r\n\r\n\u4e0d\u4e00\u6837\u7684\u662f\u5b83\u53ea\u63a5\u6536\u4e8c\u8fdb\u5236\u6570\u636e\uff0c\u6bcf\u6b21`add_data()`\u53ea\u80fd\u8f93\u5165\u4e00\u6761\u6570\u636e\uff0c\u800c\u4e14\u6ca1\u6709\u884c\u7684\u6982\u5ff5\u3002\r\n\r\n```python\r\nfrom DrissionRecord import ByteRecorder\r\n\r\nb = ByteRecorder('data.file')\r\nb.add_data(b'*****************') # \u5411\u6587\u4ef6\u5199\u5165\u4e8c\u8fdb\u5236\u6570\u636e\r\n```\r\n\r\n## \u26a1 \u6570\u636e\u5e93\u8bb0\u5f55\u5668`DBRecorder`\r\n\r\n\u652f\u6301 sqlite\uff0c\u7528\u6cd5\u548c`Recorder`\u4e00\u81f4\uff0c\u652f\u6301\u81ea\u52a8\u521b\u5efa\u6570\u636e\u5e93\u3001\u6570\u636e\u8868\u3001\u6570\u636e\u5217\u3002\r\n\r\n```python\r\nfrom DrissionRecord import DBRecorder\r\n\r\nd = DBRecorder('data.db')\r\nd.add_data({'name': '\u5f20\u4e09', 'age': 25}, table='user') # \u63d2\u5165\u6570\u636e\u5230user\u8868\r\nd.record()\r\n```\r\n\r\n# \u2615 \u8bf7\u6211\u559d\u5496\u5561\r\n\r\n\u5982\u679c\u672c\u9879\u76ee\u5bf9\u60a8\u6709\u6240\u5e2e\u52a9\uff0c\u4e0d\u59a8\u8bf7\u4f5c\u8005\u6211\u559d\u676f\u5496\u5561 \uff1a\uff09\r\n\r\n\r\n",
"bugtrack_url": null,
"license": "MIT",
"summary": "\u7528\u4e8e\u8bb0\u5f55\u6570\u636e\u7684\u6a21\u5757\u3002",
"version": "1.0.0",
"project_urls": {
"Homepage": "https://gitcode.com/g1879/DrissionRecord"
},
"split_keywords": [
"drissionrecord"
],
"urls": [
{
"comment_text": null,
"digests": {
"blake2b_256": "9deefedadd145684b8269deaeb0487f390a19a38a3b0cfacf45a9a823afe1c75",
"md5": "0305ba8ca7b2e168b3cef6ddeb2deba8",
"sha256": "735ec0a3b229059744d06405af6b73887fe6ddfbfd8c8e17de9a25f3d2cf5d64"
},
"downloads": -1,
"filename": "drissionrecord-1.0.0-py3-none-any.whl",
"has_sig": false,
"md5_digest": "0305ba8ca7b2e168b3cef6ddeb2deba8",
"packagetype": "bdist_wheel",
"python_version": "py3",
"requires_python": ">=3.6",
"size": 46023,
"upload_time": "2025-08-05T07:19:56",
"upload_time_iso_8601": "2025-08-05T07:19:56.888395Z",
"url": "https://files.pythonhosted.org/packages/9d/ee/fedadd145684b8269deaeb0487f390a19a38a3b0cfacf45a9a823afe1c75/drissionrecord-1.0.0-py3-none-any.whl",
"yanked": false,
"yanked_reason": null
},
{
"comment_text": null,
"digests": {
"blake2b_256": "2a487ce367657899231303f5776b5437013f9a56cefe708d70a68ce5ee856c09",
"md5": "7eced21b5698e704894cc4b64f91eb2e",
"sha256": "390e21666451c5399bb7bccb00e271ec0cd0252864cb66e6b3eb2e568fafa63e"
},
"downloads": -1,
"filename": "drissionrecord-1.0.0.tar.gz",
"has_sig": false,
"md5_digest": "7eced21b5698e704894cc4b64f91eb2e",
"packagetype": "sdist",
"python_version": "source",
"requires_python": ">=3.6",
"size": 39181,
"upload_time": "2025-08-05T07:19:57",
"upload_time_iso_8601": "2025-08-05T07:19:57.879479Z",
"url": "https://files.pythonhosted.org/packages/2a/48/7ce367657899231303f5776b5437013f9a56cefe708d70a68ce5ee856c09/drissionrecord-1.0.0.tar.gz",
"yanked": false,
"yanked_reason": null
}
],
"upload_time": "2025-08-05 07:19:57",
"github": false,
"gitlab": false,
"bitbucket": false,
"codeberg": false,
"lcname": "drissionrecord"
}