Python3
常用工具
1. 命令行快速搭建本地http服务器
python3 -m http.server 8000
在命令行中输入此命令,就会在当前目录下搭建http服务器,可以通过访问http://localhost:8000/查看,
这样就可以用同一网段的设备从这个http服务器下载文件
2. python在程序里获取当前文件名
sys.argv[0]
3. 十六进制字符串转bytes
bytes.fromhex("1a2b3c4d5e6f7a8b")
4. string 转 bytes
"12345678aa".encode('utf8')
5. bytes 转 int
int.from_bytes(b'1122aa','big') ('big'-大端,'little'-小端)
6. AES-CBC-128
from Crypto.Cipher import AES
import base64
key = bytes.fromhex("11223344556677881122334455667788")
iv = "1234567812345678".encode("utf-8")
buffer = "HelloWorld".encode('utf8')
buffer = buffer + b'000000' # 填充到16的整数倍
cryptor = AES.new(key, AES.MODE_CBC,iv)
encDate = cryptor.encrypt(buffer)
print("Enc: {0}".format(base64.b64encode(encDate)))
cryptor2 = AES.new(key, AES.MODE_CBC,iv) # 此处必须重新定义一个解密对象,如果使用上面的cryptor进行解密,会报错 decrypt() cannot be called after encrypt()
decDate = cryptor2.decrypt(encDate)
print(decDate)
7. 计算文件的MD5
import hashlib
def get_file_md5(file_path):
"""
获取文件md5值
:param file_path: 文件路径名
:return: 文件md5值
"""
with open(file_path, 'rb') as f:
md5obj = hashlib.md5()
md5obj.update(f.read())
_hash = md5obj.hexdigest()
return str(_hash).upper() # upper()转为大写
转自https://www.cnblogs.com/Cong0ks/p/11364660.html
校验文件:
#coding=utf-8
import hashlib
import sys
if len(sys.argv) == 3:
try:
if(sys.argv[2].lower() == 'md5'):
print (hashlib.md5(open(sys.argv[1],'rb').read()).hexdigest() )
elif(sys.argv[2].lower() == 'sha-1'):
print (hashlib.sha1(open(sys.argv[1],'rb').read()).hexdigest() )
elif(sys.argv[2].lower() == 'sha-256'):
print (hashlib.sha256(open(sys.argv[1],'rb').read()).hexdigest() )
elif(sys.argv[2].lower() == 'sha-512'):
print (hashlib.sha512(open(sys.argv[1],'rb').read()).hexdigest() )
else:
print ('[-]Please input a correct encryption algorithm.' )
except:
print ('[-]Please input a correct filename.' )
else:
print ('[*]Usage: python check_hash.py [Filename] [MD5|SHA-1|SHA-256|SHA-512]' )
转自https://blog.csdn.net/diyiday/article/details/80579547
8. os
需要在python文件头部引用os:import os
判断文件是否存在:os.path.exists(filePath) # 存在返回True;不存在返回False
由路径获取文件名:os.path.basename(filePath) # C:/xxx/aaa.txt -> aaa.txt
删除文件:os.remove(filePath)
9. filetype判断文件类型
安装:pip3 install filetype
filetype支持的文件类型:
M3gp | Mp4 | M4v | Mkv | Mov | Avi | Wmv | Mpeg | Webm | Flv | Dwg | Xcf | Jpeg | Jpx | Png | Gif | Webp | Tiff | Cr2 | Bmp | Jxr | Psd | Ico | Heic | Dcm | Aac | Midi | Mp3 | M4a | Ogg | Flac | Wav | Amr | Woff | Woff2 | Ttf | Otf | Br | Rpm | Epub | Zip | Tar | Rar | Gz | Bz2 | SevenZ | Pdf | Exe | Swf | Rtf | Nes | Crx | Cab | Eot | Ps | Xz | Sqlite | Deb | Ar | Z | Lzop | Lz | Elf | Lz4 | Wasm
判断示例:
import filetype
#判断是不是需要的视频类型
def isVideo(filepath):
videoList = ["mp4", "m4v", "mkv", "webm", "mov", "avi", "wmv", "mpg", "flv"]
try:
fileTP = filetype.guess(filepath).extension
if fileTP in videoList:
return True
else:
return False
except:
return False
10. json 和 str 互转
import json
a = '{"name":"brian", "age":"sec"}'
#json->str
b = json.loads(a)
print(type(b)) # <class 'dict'>
print(b) # {'name': 'brian', 'age': 'sec'}
#str->json
c = json.dumps(b)
print(type(c)) # <class 'str'>
print(c) # {"name": "brian", "age": "sec"}
故障处理
1. BlockingScheduler报错 apscheduler/util.py:95: PytzUsageWarning: The zone attribute is specific to pytz's interface;
添加时区:
from apscheduler.schedulers.blocking import BlockingScheduler
scheduler = BlockingScheduler(timezone="Asia/Shanghai")