Pycharm常用快捷键

  1. ctrl + e 查看最近编辑文件
  2. ctrl + shift + r 根据文件名查找文件
  3. ctrl + h 全局搜索
  4. ctrl + alt + o 优化导入包排序
  5. ctrl + shift + o 开启翻译框

快捷键设置

放大、缩小设置:File ->setting-> Keymap->搜索框中输入:Increase Font Size(双击选中)->弹出对话框时选择Add Mouse Shortcut(单击)

json、pickle、shelve 各自数据序列化方式的异同和用法

json适用于不同类型的语言,支持的数据类型:int\str\list\tuple\dict主要是操作字符串
dumps、loads操作 字符串
dump、load 操作 文件 (pickle一样的情况)

1
2
3
4
5
6
7
8
9
# dump入文件 
with open('cxs.json','w') as f:
json.dump(data,fp)

json.dump(item, fp=open("zhihu_comment.json", "w"), ensure_ascii=False)

# 从文件里load
with open("cxs.json", "r") as f:
d = json.load(f)

pickle 专为python设计,支持python所有的数据类型,主要是操作字节流

1
2
3
4
pickle.dumps("cxs")
Out[3]: b'\x80\x03X\x03\x00\x00\x00cxsq\x00.'
pickle.loads(b'\x80\x03X\x03\x00\x00\x00cxsq\x00.')
Out[4]: 'cxs'

用 python 写入 csv 后的中文乱码问题

设置 encoding=’utf-8-sig’

__init__.py 文件的作用

  • 让一个普通文件夹变成一个python模块
  • 在import一个模块时,__init__文件最先被执行

json.dumps 参数

  • indent 保持缩进

  • ensure_ascii 防止汉字被转换为 unicode (多用于写入文件时)

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    d = {"name": "陈晓生", "age": 24}

    print(json.dumps(d, indent=4, ensure_ascii=False))
    {
    "name": "陈晓生",
    "age": 24
    }

    print(json.dumps(d, indent=4))
    {
    "name": "\u9648\u6653\u751f",
    "age": 24
    }
  • separators 自定义分隔符

    1
    separators=(",", ":")

ciphey 基于深度学习自动解密密文

docker容器和镜像

镜像应用运行环境
容器运行环境+应用
即容器是镜像的应用实例

常用命令

  • docker inspect 查看容器信息

  • docker run 部署容器

  • docker start / restart / stop

  • 容器文件拷贝到宿主机 docker cp 容器id:容器内文件路径 目标路径

    1
    docker cp 4783c8deb107:/root/kf/DY/select_shop.png /tmp/cxs.png

python项目导出requirements.txt

参考:https://learnku.com/articles/47470

1
2
pip install pipreqs
pipreqs <path> --encoding=utf8 --force

添加文件头,指定库地址

1
--index-url=https://mirrors.aliyun.com/pypi/simple/ --trusted-host mirrors.aliyun.com

如何安装?

pycharm - Terminal - pip3 install -r requirements.txt

PayloadForm Data

  • Payload Content-Type:application/json
1
2
3
4
from scrapy.http import JsonRequest
yield JsonRequest(data=payload)

requests.get(url, json=data)
  • FormData Content-Type:applicatin/x-www-form-urlencode
1
2
3
yield scrapy.FormRequest(formdata=data)

requests.get(url, data=data)

JWT原理(JSON WEB TOKEN)

参考:https://www.cnblogs.com/fengzheng/p/13527425.html

常用于单点登录场景,数据由头部、载荷与签名这三部分组成,中间以 . 分隔,

  • 头部 使用base64 encode,指明令牌类型和加密算法
  • 载荷 使用base64 encode,用来存储服务器需要的数据
  • 签名 使用HMACSHA256算法,secret key 存储在服务端

代码示例

1
2
3
4
5
6
7
8
login_url = "https://login3.scrape.center/api/login"
data_url = "https://login3.scrape.center/api/book/?limit=18&offset=0"
login_data = requests.post(login_url, json=form_data).json()
token = login_data.get("token")
header = {
"Authorization": f"jwt {token}",
}
book = requests.get(data_url, headers=header)

WebKitFormBoundary文件上传

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
from requests_toolbelt import MultipartEncoder


boundary = "------WebKitFormBoundary" + "".join(
random.sample(string.ascii_letters + string.digits, 16)
)
file_headers["Content-Type"] = "multipart/form-data; boundary=" + boundary
files = {
"file_up": (
filename,
open("xxx.png", "rb"),
"image/jpeg",
{
"Content-Disposition": "form-data",
},
),
"biz": "draw",
"category": "daily",
}
m = MultipartEncoder(fields=files, boundary=boundary)

api = "https://api.vc.bilibili.com/api/v1/drawImage/upload"
resp = requests.post(api, data=m, headers=file_headers)

实现效果: