pip 是 python 的包管理器,属于勉强能用的水平,如果你在 Linux 上,不建议用它,尤其是不要做 sudo pip 这样的操作,容易和本身的包管理器打架。
临时使用,以阿里云举例
pip install -i https://mirrors.aliyun.com/pypi/simple/ --trusted-host mirrors.aliyun.com
永久配置
# Linux
mkdir -p ~/.pip
echo """
[global]
index-url = http://mirrors.aliyun.com/pypi/simple/
[install]
trusted-host=mirrors.aliyun.com
""" > ~/.pip/pip.conf
# Windows: C:\Users\username\pip\pip.ini
[global]
index-url = http://mirrors.aliyun.com/pypi/simple/
[install]
trusted-host=mirrors.aliyun.com
写大工程要隔离这是必须要注意的操作,虚拟环境保证了版本的正常维护
python -m venv /path/to/new/virtual/environment
如果涉及的数据很多,一定要用 set,因为 set 的 in 操作是 O(1) 的,用 list 是 O(n) 速度太慢
注意内置的 pow 和 math 库里的 pow 接收的参数是不一样的,前者可以接受 3 个参数
-
生成固定长度随机字符串密码
import random
import string
def random_str(length=8):
return "".join(random.sample(string.ascii_letters, length))
from random import Random
def random_str(randomlength=8):
str = ''
chars = 'AaBbCcDdEeFfGgHhIiJjKkLlMmNnOoPpQqRrSsTtUuVvWwXxYyZz0123456789'
length = len(chars) - 1
random = Random()
for i in range(randomlength):
str+=chars[random.randint(0, length)]
return str
-
二进制字符串转普通字符串
每 8 个分成一组,用 int 转 10 进制,再用 chr 转为 ascii 字符
s="0110001101111001"
ans=""
for i in range(0,len(s)//8):
x = s[i*8:i*8+8]
ans+=chr(int(x,2))
利用 binascii,先用 int 转为 10 进制,然后转为 16 进制字符串,调用 unhexlify 执行翻译
import binascii
s="0110001101111001"
ans=binascii.unhexlify('%x'%int(s,2)).decode()
-
符号数与无符号数转换
无符号 -> 有符号
import ctypes
ctypes.c_int64(17039472050328044269).value
有符号 -> 无符号
import ctypes
ctypes.c_uint64(-1407272023381507347).value
-
捕捉输入的 Ctrl+C
很邪恶的屏蔽用户输入 Ctrl+C 的做法
import signal
def signal_handler(signum,data):
if signum == signal.SIGINT:
print("Ctrl+C is pressed!")
# raise KeyboardInterrupt
if __name__ == '__main__':
signal.signal(signal.SIGINT, signal_handler)
sleep(666)
-
AES 加密字符串
加密
plaintext = "hello world"
import pyaes,base64
aes = pyaes.AESModeOfOperationCTR(b"This_key_for_demo_purposes_only!")
encrypted_text = base64.b64encode(aes.encrypt(plaintext.encode("utf-8")))
print(encrypted_text) # ipkEJevbnsfbEm4=
解密
encrypted_text = "ipkEJevbnsfbEm4="
import pyaes, base64
aes = pyaes.AESModeOfOperationCTR(b"This_key_for_demo_purposes_only!")
plaintext = aes.decrypt(base64.b64decode(encrypted_text)).decode()
print(plaintext) # hello world