随笔分类 - 实用小脚本
摘要:假设我们有一段程序,从 Redis 中读取数据,解析以后提取出里面的 name 字段: import json import redis client = redis.Redis() def read(): while True: data = client.lpop('info') if data
阅读全文
摘要:我们经常会遇到监控文件变化的需求。例如日志监控程序监控日志文件,一旦日志文件发生变化,就进行读取。或者是大批量爬虫的规则配置文件监控,爬虫本身持续运行,一旦规则文件发生修改就自动读取新的规则。 常见的做法,如果文件比较小,可以直接读取以后跟上次读取的内容做对比;也可以判断文件的修改时间是否发生变化;
阅读全文
摘要:如果大家在 Linux 或者 macOS 下面运行一段可能导致内存泄露的程序,那么你可能会看到下面这样的情况: 而如果你用的系统是 Windows,那么可能电脑直接就卡死了。 但是,调试这种 OOM(Out of Memory)的问题有时候是非常困难的,因为你不知道代码哪个地方会导致内存泄露。但是如
阅读全文
摘要:经常使用 Selenium 或者 Puppeteer 的同学都知道,他们启动的 Chrome 浏览器分为有头模式和无头模式。在自己电脑上操作时,如果是有头模式,会弹出一个 Chrome 浏览器窗口,然后你能看到这个浏览器里面在自动操作。而无头模式则不会弹出任何窗口,只有进程。 别去送死了。Selen
阅读全文
摘要:假设我们实现了一个程序,它从 Redis 读取数据,然后写入 MongoDB。一开始程序是这样的: def read_from_redis(): ... def write_to_mongodb(doc): ... def parse(): for doc in self.read_from_red
阅读全文
摘要:假设我们通过爬虫获取了上万条不规范的地址信息: 杭州市滨江区网商路599号东城区和平里街道上海市徐汇区 xx 小区... 现在老板想让你把这些地址统一格式化为标准的省市区地址格式,并写入到 Excel 中。你应该如何操作? 有一个库,叫做 cpca,可以非常方便地解决这个问题。我们来写一段非常简单的
阅读全文
摘要:目前在中文网上能搜索到的绝大部分关于装饰器的教程,都在讲如何装饰一个普通的函数,或者把类方法当做普通函数装饰。但如果要在装饰器里面运行你装饰的这个方法所在的类中的其他方法和属性,应该如何操作? 以捕获一个方法的异常为例来进行说明。我们写一个类Test, 它的结构如下: class Test(obje
阅读全文
摘要:我的公众号是使用Bear这个Mac App来写的。它在官网上写到,所有笔记数据通过SQLite来储存,如下图所示。 SQLite是一个基于文件的关系型数据库,它只有一个文件,但是却最多能储存140TB的数据[1]。 SQLite官网给出了一个判断是否适合使用 SQLite 的标准: 如果程序和数据分
阅读全文
摘要:今天的问题来自于公众号粉丝交流群。有同学问道:使用 loguru 时,如何把日志中不同的内容写入不同的文件中? 这位同学试图通过下面这种写法,创建三个不同的日志文件,并分别接收不同的内容: from loguru import logger logger_1 = logger logger_2 =
阅读全文
摘要:设想这样一个场景,你要给一个项目开发测试程序,程序开始运行的时候,会创建初始环境,测试完成以后,会清理环境。 这段逻辑本身非常简单: setup() test() clean() 但由于测试的代码比较复杂,你总是在调试的时候程序异常,导致每次clean()函数还没有来得及运行,程序就崩溃了。 你可能
阅读全文
摘要:假设有这样一个需求,你需要从 Redis 中持续不断读取数据,并把这些数据写入到 MongoDB 中。你可能会这样写代码: import json import redis import pymongo client = redis.Redis() handler = pymongo.MongoCl
阅读全文
摘要:大家有时候可能需要在 Linux 上面生成 zip 文件或者对一个 zip 文件进行解压。如果你在网上搜索怎么在 Linux 解压 zip 文件,你一般会看到下面这样的回答: 但如果你手边刚好有一台 Linux 服务器的话,你可以试一试,一般你会得到这样的返回: 这是因为,zip、unzip 这两个
阅读全文
摘要:前言 数据开发过程中,为了确保生产数据库安全,一般将实时数据同步、备份到本地测试数据库完成开发工作,最后部署应用。 本文实际业务场景:需要从客户处的生成数据库(如mysql数据库)备份数据表到本地的一个sqlserver库中,将生产数据库表复制还原过来。为了快速完成数据备份操作,于是我写了个同步迁移
阅读全文
摘要:代码一: #!/usr/bin/python # -*- coding:UTF-8 -*- import time from watchdog.observers import Observer from watchdog.events import RegexMatchingEventHandle
阅读全文
摘要:代码: # encoding:utf-8 import urllib import urllib.request import urllib.parse import requests import execjs class Google(): def __init__(self): self.la
阅读全文
摘要:文章说明 本文实现的方式大部分源码是从借鉴别人的博客,再他们的基础上修复了不能翻译的问题和其他的一些bug。但是原文找不到了,没法粘贴原文地址了,非常抱歉。 本文章解决的问题有: 翻译不来,在之前基础上对需要翻译的文字进行urlEncode,实现方式 parse.quote(self.text) 结
阅读全文
摘要:将下载或上传任务(一个文件或一个压缩包)人为的划分为几个部分,每一个部分采用一个线程进行上传或下载,如果碰到网络故障,可以从已经上传或下载的部分开始继续上传下载未完成的部分,而没有必要从头开始上传下载。用户可以节省时间,提高速度。 一、分割视频 1、分割的每个小部分的大小: size = 1024
阅读全文