DrissionRecorder


NameDrissionRecorder JSON
Version 3.6.2 PyPI version JSON
download
home_pagehttps://gitee.com/g1879/DrissionRecorder
Summary用于记录数据的模块。
upload_time2024-10-15 08:56:17
maintainerNone
docs_urlNone
authorg1879
requires_python>=3.6
licenseMIT
keywords drissionrecorder
VCS
bugtrack_url
requirements No requirements were recorded.
Travis-CI No Travis.
coveralls test coverage No coveralls.
            # ⭐️ 简介

本库是一个基于 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"
}
        
Elapsed time: 1.51630s