Python常用代码

通用的 try 语句

try:
    ...
except Exception as r:
    print(r)

获取当前脚本所在路径及脚本名称

import sys

# sys.path[0] 返回当前脚本所在路径,形如“c:\users\aa”,末尾不含反斜线
path = sys.path[0]

# sys.argv[0] 返回当前脚本文件名(不含路径),形如“test.py”
# sys.argv[1]... 为执行时的命令行参数
filename = sys.argv[0]

python使用时间戳命名文件名

import time

filename = time.strftime("%Y-%m-%d-%H_%M_%S",time.localtime(time.time())) + '.jpg'

# 格式化为中文日期
now = time.localtime(time.time())
strDate = "{}年{}月{}日".format(now.tm_year, now.tm_mon, now.tm_mday)

更简化的方法:

filename = time.strftime("%Y-%m-%d-%H_%M_%S.jpg")

生成随机文件名

import uuid

def random_filename(filename):
  ext = os.path.splitext(filename)[1]
  # uuid4 重复的可能性接近 0
  return uuid.uuid4().hex + ext

文件路径操作

import sys
import os

#取得当前脚本所在文件夹下的所有文件
files = os.listdir(sys.path[0])

#取得当前工作路径
pwd = os.getcwd()

#使用下面的脚本也可以取得当前目录,但是经常出现异常(可能是因为系统当前目录的影响)
cur_path = os.path.dirname(__file__)

#取得文件字节数
fileinfo = os.stat(filename)
size = fileinfo.st_size

#取得当前目录下所有指定类型的文件
import glob
files = glob.glob("*.jpg")

敲任意键退出

os.system("pause")

计算代码消耗时间

import os, time

time1 = time.perf_counter()
# do something
time2 = time.perf_counter() - time1
print("用时 {:.3} 秒".format(time2))
os.system("pause")

调用命令行并获取输出

import os
import subprocess,sys

CREATE_NO_WINDOW = 0x08000000 # 隐藏调用的命令行窗口
#r=subprocess.call('dir', creationflags=CREATE_NO_WINDOW, shell=True)
r=subprocess.check_output('dir', creationflags=CREATE_NO_WINDOW, shell=True)

for line in r.splitlines(): 
print(str(line, encoding='gbk')) # 防止中文乱码

print("处理完毕")
os.system("pause")

在屏幕同一位置输出信息(不换行)

import time
i = 0
for i in range(20):
  time.sleep(1)
  # “\r” 表示回车(光标回到行首),需要配合 end="" 使用,才能每次在同一行输出信息。
  print("\r# Process: %0.1f %%" % (float(i + 1) / float(20) * 100), end="")

使用 requests 访问 https 网站

import urllib3

# 使用requests访问https站点时,设置verify=False后,禁止显示警告信息
urllib3.disable_warnings()

session = requests.Session()
response = session.get(url, headers = headers, verify=False, timeout=3)

取得并显示验证码图片

from PIL import Image
import io

response = session.get("https://pan.baidu.com/DrawServlet?Rand={}".format(random.random() * 10000), headers = headers, verify=False, timeout=3)
image = Image.open(io.BytesIO(response.content))
image.show()   

确保输入的是整数

a = 0
while a == 0:
    try:
        a = int(input("请输入刷新时长(单位:秒):"))
    except:
        pass
print(a)

使用 requests 提交数据

#coding=utf-8

import requests
import time

myheader = '''
Accept:*/*
Accept-Language:zh-cn
x-requested-with:XMLHttpRequest
Content-Type:application/json
Accept-Encoding:gzip, deflate
User-Agent:Mozilla/4.0 (compatible; MSIE 8.0; Windows NT 5.1; Trident/4.0; .NET CLR 2.0.50727; .NET4.0C; .NET4.0E)
Host:xjxt.lndisedu.com
Connection:Keep-Alive
Cache-Control:no-cache
'''
def MakeHeader(headerText):
    s = headerText.strip().split('\n')
    # 加入strip()后,抓包工具抓取的报文头即使冒号后面有多余的空格也可以直接粘贴进来了
    s = {x.split(':', 1)[0].strip() :x.split(':', 1)[1].strip() for x in s}
    return s

session = requests.session()
Token = Login(session)
try:
    if Token:
        headers = MakeHeader(myheader)
        headers['ccrf-token'] = Token
        url = 'http://map.baidu.com/test.jsp?token={}'.format(Token)
        params = '{"params":{"javaClass":"ParameterSet","map":{"XS_JBXX_ID":"<ID>","SFSQZNM":"<FLAG>","SFSQZNM_JCWG":"0"},"length":3}}'
        params = params.replace("<ID>", Id)
        params = params.replace("<FLAG>", str(flag))
        
        i = 0
        # 尝试提交 3 次
        while i < 3:
            try:
                # 不指定 timeout 参数,转接超时程序会直接失去反应
                r = session.post(url, data=params, headers=headers, timeout=5)
                if r.text != '{"map":{},"javaClass":"ParameterSet"}':
                    print('ID:{} SuiQian Error'.format(Id))
                else:
                    return
            except requests.exceptions.RequestException:
                i += 1        
finally:
    Logout(session) 

用 BytesIO 取代文件输入

# 本地图像二值化后传入 ddddocr 中
table = []    
for i in range(256):
    if i < 144:  # 阀值
        table.append(0)
    else:
        table.append(1)  

im = Image.open(filename)
imgry = image.convert('L')          # 转为灰度
binary = imgry.point(table, '1')    # 转为二值,去除浅色点,1表示白点,0表示黑点    
# 新建字节流
bytes_io = io.BytesIO()
# 将图像保存到字节流中
im.save(bytes_io, format='png')
bytes_str = bytes_io.getvalue()
res = ocr.classification(bytes_str)

# 将 requests 的请求结果传入 PIL 中打开
r=requests.get("http://test.com/imagegen.jsp", verify=False)
im = Image.open(io.BytesIO(r.content))
# 在图片查看器中显示验证码
im.show()

运行环境缺少指定的库时不显示错误信息,直接退出

import sys
try:
    import SpecialLibrary
except ImportError:
    sys.exit(0)
posted @ 2020-07-27 06:24  汉学  阅读(848)  评论(0)    收藏  举报