# ⭐️ 简介
本库是一个基于 python 的工具集,用于记录数据到文件。
使用方便,代码简洁,是一个可靠、省心且实用的工具。
支持多线程同时写入文件。
**交流QQ群:** 897838127
**联系邮箱:** g1879@qq.com
**使用手册:** 📒[点击打开](https://DrissionPage.cn/DrissionRecorder/)
# ✨️ 理念
简单,可靠,省心。
# 📕 背景
进行数据采集的时候,常常要保存数据到文件,频繁开关文件会影响效率,而如果等采集结束再写入,会有因异常而丢失数据的风险。
因此写了这些工具,只要把数据扔进去,它们能缓存到一定数量再一次写入,减少文件开关次数,且在程序崩溃或退出时尽量自动保存。
它们使用非常方便,无论何时何地,无论什么格式,只要使用`add_data()`方法把数据存进去即可,语法极其简明扼要,使程序员能更专注业务逻辑。
它们还相当可靠,作者曾一次过连续记录超过 300 万条数据,也曾 50 个线程同时运行写入数万条数据到一个文件,依然轻松胜任。
工具还对表格文件(xlsx、csv)做了很多优化,封装了实用功能,可以使用表格文件方便地实现断点续爬、批量转移数据、指定坐标填写数据等。
# 🍀 特性
- 可以缓存数据到一定数量再一次写入,减少文件读写次数,降低开销。
- 支持多线程同时写入数据。
- 写入时如文件打开,会自动等待文件关闭再写入,避免数据丢失。
- 对断点续爬提供良好支持。
- 可方便地批量转移数据。
- 可根据字典数据自动创建表头。
- 自动创建文件和路径,减少代码量。
# 🌠 概览
这里简要介绍各种工具用途,详细用法请查看使用方法章节。
## ⚡ 记录器`Recorder`
`Recorder`的功能简单直观高效实用,只做一个动作,就是不断接收数据,按顺序往文件里添加。可以接收单行数据,或二维数据一次写入多行。
它支持 csv、xlsx、json、txt 四种格式文件。
```python
from DrissionRecorder import Recorder
data = ((1, 2, 3, 4),
(5, 6, 7, 8))
r = Recorder('data.csv')
r.add_data(data) # 一次记录多行数据
r.add_data('abc') # 记录单行数据
```
## ⚡ 表格填充器`Filler`
`Filler`用于对表格文件填写数据,可以指定填其坐标。它的使用非常灵活,可以指定坐标为左上角,填入一片二维数据。还封装了记录数据处理进度的功能(比如断点续爬)。
除此以外,它还能给单元格设置链接和样式。
它只支持 csv 和 xlsx 格式文件。
```python
from DrissionRecorder import Filler
f = Filler('results.csv')
f.add_data((1, 2, 3, 4), 'a2') # 从A2单元格开始,写入一行数据
f.add_data(((1, 2), (3, 4)), 'd4') # 以D4单元格为左上角,写入一片二维数据
```
## ⚡ 二进制数据记录器`ByteRecorder`
`ByteRecorder`用法最简单,它和`Recorder`类似,记录多个数据然后按顺序写入文件。不一样的是它只接收二进制数据,每次`add_data()`只能输入一条数据,而且没有行的概念。
支持任意文件格式。
```python
from DrissionRecorder import ByteRecorder
b = ByteRecorder('data.file')
b.add_data(b'*****************') # 向文件写入二进制数据
```
## ⚡ 数据库记录器`DBRecorder`
支持 sqlite,用法和`Recorder`一致,支持自动创建数据库、数据表、数据列。
```python
from DrissionRecorder import DBRecorder
d = DBRecorder('data.db')
d.add_data({'name': '张三', 'age': 25}, table='user') # 插入数据到user表
d.record()
```
# ☕ 请我喝咖啡
如果本项目对您有所帮助,不妨请作者我喝杯咖啡 :)
![](https://gitee.com/g1879/DrissionPageDocs/raw/master/static/img/code.jpg)
Raw data
{
"_id": null,
"home_page": "https://gitee.com/g1879/DrissionRecorder",
"name": "DrissionRecorder",
"maintainer": null,
"docs_url": null,
"requires_python": ">=3.6",
"maintainer_email": null,
"keywords": "DrissionRecorder",
"author": "g1879",
"author_email": "g1879@qq.com",
"download_url": "https://files.pythonhosted.org/packages/51/91/67db31af68e2722f625636ed6594d1b8f5189d65fd54535b7b04937e2d29/DrissionRecorder-3.6.2.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**\u4ea4\u6d41QQ\u7fa4\uff1a**\u00a0897838127\r\n\r\n**\u8054\u7cfb\u90ae\u7bb1\uff1a**\u00a0g1879@qq.com\r\n\r\n**\u4f7f\u7528\u624b\u518c\uff1a** \ud83d\udcd2[\u70b9\u51fb\u6253\u5f00](https://DrissionPage.cn/DrissionRecorder/)\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## \u26a1 \u8bb0\u5f55\u5668`Recorder`\r\n\r\n`Recorder`\u7684\u529f\u80fd\u7b80\u5355\u76f4\u89c2\u9ad8\u6548\u5b9e\u7528\uff0c\u53ea\u505a\u4e00\u4e2a\u52a8\u4f5c\uff0c\u5c31\u662f\u4e0d\u65ad\u63a5\u6536\u6570\u636e\uff0c\u6309\u987a\u5e8f\u5f80\u6587\u4ef6\u91cc\u6dfb\u52a0\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\u5b83\u652f\u6301 csv\u3001xlsx\u3001json\u3001txt \u56db\u79cd\u683c\u5f0f\u6587\u4ef6\u3002\r\n\r\n```python\r\nfrom DrissionRecorder 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 \u8868\u683c\u586b\u5145\u5668`Filler`\r\n\r\n`Filler`\u7528\u4e8e\u5bf9\u8868\u683c\u6587\u4ef6\u586b\u5199\u6570\u636e\uff0c\u53ef\u4ee5\u6307\u5b9a\u586b\u5176\u5750\u6807\u3002\u5b83\u7684\u4f7f\u7528\u975e\u5e38\u7075\u6d3b\uff0c\u53ef\u4ee5\u6307\u5b9a\u5750\u6807\u4e3a\u5de6\u4e0a\u89d2\uff0c\u586b\u5165\u4e00\u7247\u4e8c\u7ef4\u6570\u636e\u3002\u8fd8\u5c01\u88c5\u4e86\u8bb0\u5f55\u6570\u636e\u5904\u7406\u8fdb\u5ea6\u7684\u529f\u80fd\uff08\u6bd4\u5982\u65ad\u70b9\u7eed\u722c\uff09\u3002\r\n\r\n\u9664\u6b64\u4ee5\u5916\uff0c\u5b83\u8fd8\u80fd\u7ed9\u5355\u5143\u683c\u8bbe\u7f6e\u94fe\u63a5\u548c\u6837\u5f0f\u3002\r\n\r\n\u5b83\u53ea\u652f\u6301 csv \u548c xlsx \u683c\u5f0f\u6587\u4ef6\u3002\r\n\r\n```python\r\nfrom DrissionRecorder import Filler\r\n\r\nf = Filler('results.csv')\r\nf.add_data((1, 2, 3, 4), 'a2') # \u4eceA2\u5355\u5143\u683c\u5f00\u59cb\uff0c\u5199\u5165\u4e00\u884c\u6570\u636e\r\nf.add_data(((1, 2), (3, 4)), 'd4') # \u4ee5D4\u5355\u5143\u683c\u4e3a\u5de6\u4e0a\u89d2\uff0c\u5199\u5165\u4e00\u7247\u4e8c\u7ef4\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\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\u652f\u6301\u4efb\u610f\u6587\u4ef6\u683c\u5f0f\u3002\r\n\r\n```python\r\nfrom DrissionRecorder 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 DrissionRecorder 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![](https://gitee.com/g1879/DrissionPageDocs/raw/master/static/img/code.jpg)\r\n",
"bugtrack_url": null,
"license": "MIT",
"summary": "\u7528\u4e8e\u8bb0\u5f55\u6570\u636e\u7684\u6a21\u5757\u3002",
"version": "3.6.2",
"project_urls": {
"Homepage": "https://gitee.com/g1879/DrissionRecorder"
},
"split_keywords": [
"drissionrecorder"
],
"urls": [
{
"comment_text": "",
"digests": {
"blake2b_256": "0cffc2eefb5e68015db7d9075748cbd2611341a2c2d873aceca0b27625199553",
"md5": "8b95c27bf070a7570d7916488f86dcc5",
"sha256": "176c689c88aed0eec2ed9fcce624dc438b01d7f8577ac391b64a6377e7ad6c31"
},
"downloads": -1,
"filename": "DrissionRecorder-3.6.2-py3-none-any.whl",
"has_sig": false,
"md5_digest": "8b95c27bf070a7570d7916488f86dcc5",
"packagetype": "bdist_wheel",
"python_version": "py3",
"requires_python": ">=3.6",
"size": 37757,
"upload_time": "2024-10-15T08:56:16",
"upload_time_iso_8601": "2024-10-15T08:56:16.722991Z",
"url": "https://files.pythonhosted.org/packages/0c/ff/c2eefb5e68015db7d9075748cbd2611341a2c2d873aceca0b27625199553/DrissionRecorder-3.6.2-py3-none-any.whl",
"yanked": false,
"yanked_reason": null
},
{
"comment_text": "",
"digests": {
"blake2b_256": "519167db31af68e2722f625636ed6594d1b8f5189d65fd54535b7b04937e2d29",
"md5": "36eea99c202c57e95770d770f2418ab6",
"sha256": "ceaca3e80c8c9d18cd1f90149ce827d70639587aa28cf72a31167a37248792fd"
},
"downloads": -1,
"filename": "DrissionRecorder-3.6.2.tar.gz",
"has_sig": false,
"md5_digest": "36eea99c202c57e95770d770f2418ab6",
"packagetype": "sdist",
"python_version": "source",
"requires_python": ">=3.6",
"size": 29598,
"upload_time": "2024-10-15T08:56:17",
"upload_time_iso_8601": "2024-10-15T08:56:17.900301Z",
"url": "https://files.pythonhosted.org/packages/51/91/67db31af68e2722f625636ed6594d1b8f5189d65fd54535b7b04937e2d29/DrissionRecorder-3.6.2.tar.gz",
"yanked": false,
"yanked_reason": null
}
],
"upload_time": "2024-10-15 08:56:17",
"github": false,
"gitlab": false,
"bitbucket": false,
"codeberg": false,
"lcname": "drissionrecorder"
}