首页 > 编程语言 >Python编程经验

Python编程经验

时间:2022-10-05 09:46:17浏览次数:54  
标签:经验 return Python 编程 user print 033 message def

目录

代码结构

工作目录

  • 为每个用户,每项任务创建单独的文件夹
def mkuserdir(user):
    if not os.path.isdir(user):
        print(B("[*]Mkdir %s" % user))
        os.mkdir(user)
    else:
        print(B("[*]Dir %s already exists" % user))

全局变量

  • 设置全局变量FILTER列表,过滤时间以及关键字,在业务函数内部判断
  • 设置全局布尔变量

调试信息

  • 在函数入口处、循环处、判断处、IO处、异常处打印调试信息

  • 字符串颜色处理

#红色:报错
def R(message):
    return "\033[1;91m{}\033[0;m".format(message)
#绿色:成功
def G(message):
    return "\033[1;92m{}\033[0;m".format(message)
#黄色:警告
def Y(message):
    return "\033[1;93m{}\033[0;m".format(message)
#蓝色:提示
def B(message):
    return "\033[1;94m{}\033[0;m".format(message)
  • 打印格式
#提示
print(B("[*]Getting outbox in the email: %s" % user))
#报错
print(R("[-]Get mail fail, time cost: %.2fs" % (time)))
#成功
print(G("[+]Get mail successfully, time cost: %.2fs" % (time)))
  • python2/3 print不报错
#用比当前版本的 python 更新的版本的print函数
from __future__ import print_function

异常处理

  • 对容易出错的代码(IO/查找/转换)的代码用try包起来
  • try里还可以再用try捕捉更细节的错误
  • 定义报错函数PrintException,在except处调用
  • 使用sys.exc_info获取错误信息
def PrintException():
    exc_type, exc_obj, tb = sys.exc_info()
    f = tb.tb_frame
    lineno = tb.tb_lineno
    filename = f.f_code.co_filename
    linecache.checkcache(filename)
    line = linecache.getline(filename, lineno, f.f_globals)
    print(R('EXCEPTION IN (LINE {} "{}"): {}'.format(lineno, line.strip(), exc_obj)))
  • 也可使用traceback.printexc()
from traceback import print_exc
try:  
    account = getAccount(user, passwd)
except Exception,e:  
    traceback.print_exc()  

尝试次数

  • 设置尝试次数,超出后就返回错误
tries1 = 0
while tries1<3:
    try:
        account = getAccount(user, passwd)
        break
    except Exception as e:
        PrintException()
        tries1 += 1
        time.sleep(20)
if tries1 == 3:
	return False

化简结构

  • 对列表尽量使用生成式

  • 一句话IO

mids = open(os.path.join(user, "mid.txt")).read().split()

日志

  • 编写专门的log函数,log/log2file,将成功或者失败信息写入日志
def log(user, text):
    print(B(text))
    with open(os.path.join(user, "log.txt"), "a") as f:
        f.write(text+"\n")

哈希和ID

  • 将哈希或者ID保存到全局列表或者写到文件中,避免重复操作对象
def message_id(user, item, oper):
    if oper == 'w':
        try:
            with open(os.path.join(user, "mid.txt"), "a") as f:
                f.write(item.message_id+"\n") 
            return True
        except:
            return False
    elif oper == 'q':
        try:
            mids = open(os.path.join(user, "mid.txt")).read().split()
            if item.message_id in mids:
                return True
            else:
                return False
        except:
            return False

函数

  • 按照包含关系分层,按照独立功能分块

  • 入口判断、值获取、业务处理

  • 每个函数调用都设置返回值,根据返回值判断是否成功,是否进行下一步

  • 连接函数:用函数返回对象,比如account

  • 业务函数:处理独立业务逻辑

第三方库

exchangelib

  • 屏蔽https证书警告
import urllib3
urllib3.disable_warnings(InsecureRequestWarning)
  • 忽略ssl错误
from exchangelib.protocol import BaseProtocol
from exchangelib.protocol import NoVerifyHTTPAdapter
BaseProtocol.HTTP_ADAPTER_CLS = NoVerifyHTTPAdapter
  • 加入请求头
BaseProtocol.USERAGENT = "Mozilla/5.0 (Windows NT 6.1; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/84.0.4147.105 Safari/537.36"
  • 传输适配器:用来为HTTP\HTTPS服务自定义交互方法
import requests.adapters

字符串处理

replace

fp.write(item.body.replace("\\r\\n", "\n"))

strip

line.strip()

split

address.split("@")[0]

join

symbol.join(seq) #用symbol符号将seq序列中的元素连接到一起

格式化

  • 原生格式化
path = "%s_%s_%s" % (address.split("@")[0], line.split()[0], item)
  • format格式化
print("[*] Found {} mails, {} unread".format(account.inbox.total_count, account.inbox.unread_count))

列表处理

打包函数

  • 用于将可迭代的对象作为参数,将对象中对应的元素打包成一个个元组,然后返回由这些元组组成的对象
data = pd.read_excel('GDP.xlsx')
province = list(data["province"])
gdp = list(data["2019_gdp"])
list = [list(z) for z in zip(province,gdp)]

标签:经验,return,Python,编程,user,print,033,message,def
From: https://www.cnblogs.com/z5onk0/p/16755082.html

相关文章

  • python爬虫使用session保持登录状态
    今天有个客户需求,从网站上下载会员试题,需要在登录状态下载,然后将网页中展示的试题保存在word中。网站上展示的所有试题要保存在一个word文档中,但是每一个试题结束下一个试......
  • Python文件处理
    Excel打开csv,去重,保存到exceldf=pd.read_csv("newhouse.csv",names=['name','xzqy','wylx',······,'state'])df=df.drop_duplicates()df.to_excel("newhouse......
  • Python数据处理
    PandasSeries一列带索引的数据s=pd.Series(np.random.randn(5),name='Helloworld')DataFrame二维数据,多组Series的集合df=pd.read_excel('GDP.xlsx')重......
  • Python可视化
    地图可视化pyecharts绘制各省市GDPfrompyecharts.globalsimportThemeType#引入主题Map(init_opts=opts.InitOpts(width="1000px",height="600px",theme=ThemeTyp......
  • python5-eg
    1实例012programmer_1='程序员甲:搞IT太辛苦了,我想换行......怎么办?'3programmer_2='程序员乙:敲一下回车键'4print(programmer_1+'\n'+programmer_2)实......
  • Python 中四舍五入的方法,你真的会吗
    Python的四舍五入,还真有点小麻烦。1、使用round大多数情况下,我们会使用round来保留小数,但这并不符合我们在数学知识里的规则。round(number[,ndigits])round()......
  • 【笨方法学python】ex18 - 命名、变量、代码、函数
    代码如下:点击查看代码#-*-coding:utf-8--*-#命名、变量、代码、函数#thisoneislikeyourscriptswithargvdefprint_two(*args): arg1,arg2=args pri......
  • python装饰器进阶指南
    前言最近一有时间就在整理自己常用的代码片段,并做成了私人pip包,正好整理到了装饰器的部分,所以就想着写篇文章来总结一下。写这篇文章的目的是为了让大家对装饰器有一个更......
  • 【笨方法学python】ex17 - 更多文件操作
    代码如下:点击查看代码#-*-coding:utf-8--*-#更多文件操作fromsysimportargvfromos.pathimportexists#exists模块:将文件名字符串作为参数,如果文件存在,......
  • 【笨方法学python】ex16 - 读写文件
    代码如下:点击查看代码#-*-coding:utf-8--*-#读写文件#close-关闭文件(保存)。#read-读取文件内容,结果可赋值给一个变量。#readline-读取文本文件中的一......