Echo's Blog - Python
type: channel
link: http://www.iiecho.com/tag/Python/
items: Django
items: Python语法
items: 邮件自动发送训练结果

Django
type: item
date: 2023-12-20T09:50:00+00:00
description: Django是一个开源的、用于构建Web应用程序的高级Python Web框架。安装pip install django创建项目Django中项目会有一些默认的文件和默认的文件夹在项目文件夹下运行，生成默认文件：D:\Anaconda3\envs\DPlearning\Scripts\django-admin.exe startproject 项目名添加到系统环境变量后可以不用输入路径。默认文件介绍默认生成的文件：manager.py:项目的管理、启动项目、创建app、数据管理【不需要修改】与项目同名的文件夹asgi.py: 接收网络请求（异步请求）【不需要修改】wsgi.py: 接收网络请求（同步请求）【不需要修改 】urls.py: URL和函数的对应关系【经常操作】settting.py: 项目配置文件。【会操作，连接数据库等配置】app的创建和说明一般情况下，项目下创建一个app即可。项目目录下运行python manage.py startapp app01会生成app01文件夹。├─app01 │ │ admin.py 【固定，不用动】 django默认提供的后台管理 │ │ apps.py 【固定，不用动】 app的启动类 │ │ models.py 【重要】 对数据库进行操作。不需要再用pymysql了。 │ │ tests.py 【固定，不用动】 单元测试 │ │ views.py 【重要】 函数 │ │ __init__.py │ │ │ └─migrations 【固定，不用动】 数据库变更记录 │ __init__.py │ └─mydjango │ asgi.py │ settings.py │ urls.py │ wsgi.py └─ __init__.py快速上手确保app已注册:\mydjango\settings.py中的INSTALLED_APPS增加'app01.apps.App01Config'。app01改成自己新建的app的名称编写URL和视图函数对应关系urls.py编写视图函数view.py启动django项目。命令行启动：python manage.py runservertemplatesdef user_list(request): # 去app01下的templates下的user_list.html。根据app的注册顺序去找templates下的user_list.html return render(request,'user_list.html') def user_add(request): return render(request,'user_add.html')静态文件在开发过程中，一般将：图片cssjs都会当作静态文件处理。django中，一般将静态文件放在app目录下的static中。在app目录下创建static文件夹顶部{% load static %}，引入静态文件。 , 模板语法本质上：在html中写一些占位符，由数据对这些占位符进行替换和处理。当浏览器访问时，先访问utls.py,然后跳转到views.py函数，函数的render方法将含模板语法的html转换为标准的html传给浏览器，最后浏览器读取标准html解析并显示。单独一个值用花括号{}def tpl(request): name = "韩超" return render(request,'tpl.html',{"n1":name}) TPL TPL {{ n1 }} 列表(元组)的索引 {{ n2.0 }} {{ n2.1 }} {{ n2.2 }} 循环{% for item in n2 %} {{item}} {% endfor %}字典 {{ n3 }} {{ n3.name }} {{ n3.salary }} {{ n3.role }} {% for item in n3.keys %} {{ item }} {% endfor %} {% for item in n3.values %} {{ item }} {% endfor %} {% for k,v in n3.items %} {{ k }} = {{ v }} {% endfor %}列表里嵌套字典:[{},{},{}]{{ n4.1.name }} {{ n4.1.salary }} {{ n4.1.role }} {{ n4.2.name }} {{ n4.2.salary }} {{ n4.2.role }} {% for item in n4 %} {{ item.name }} {{ item.salary }} {{ item.role }} {% endfor %}if语句{% if n1 == …

Python语法
type: item
date: 2023-09-09T12:04:00+00:00
description: Python常用的语法和函数..upper():转换为大写;lower():转换为小写.upper() 方法：该方法将字符串中的所有字符转换为大写字母，并返回一个新的字符串，原始字符串不受影响。>>> strs = 'abcd12efg' >>> strs.upper() # 所有字母全大写 'ABCD12EFG' >>> strs.upper().title() # 单词首字母大写 'Abcd12Efg' >>> strs.title() # 字符串中的单词的首字母转换为大写，而其他字母转换为小写 'Abcd12Efg' >>> strs.capitalize() # 字符串首字母大写 'Abcd12efg' >>> "12abc".capitalize() '12abc'.lower()方法该方法将字符串中的所有字符转换为小写字母，并返回一个新的字符串，原始字符串不受影响。text = "Hello, World!" lower_text = text.lower() print(lower_text) # 输出: "hello, world!".title():字符串中的单词的首字母转换为大写，而其他字母转换为小写.title() 方法是 Python 字符串的一个方法，用于将字符串中的单词的首字母转换为大写，而其他字母转换为小写，从而使字符串看起来像一个标题或者句子的开头。具体来说，它将字符串中每个单词的第一个字母大写化，其余字母小写化。str.title()text = "hello world" title_text = text.title() print(title_text) # 输出: "Hello World"strip()删除空格strip()只会移除字符串两端的字符，而不会移除字符串中间的字符。如果要移除中间的字符，可以考虑使用其他字符串方法，比如 replace() 或正则表达式。string.strip([characters])参数：characters（可选）：要从字符串两端移除的字符集合。如果不提供这个参数，默认移除空白字符。strip() 方法返回一个新的字符串，其中移除了指定字符集合或空白字符。原始字符串本身不会被修改，而是生成一个新的字符串。strip()：删除首尾空格；rstrip():仅删除右空格；lstrip():仅删除右空格；strs = ' I like python ' one = strs.strip() print(one) # 'I like python' two = strs.rstrip() print(two) # ' I like python' text = " Hello, World! " stripped_text = text.strip() # 默认移除空白字符 print(stripped_text) # 输出: "Hello, World!" text = "---Hello, World!---" stripped_text = text.strip('-') # 移除指定字符 "-" print(stripped_text) # 输出: "Hello, World!" text = " Hello, World! " stripped_text = text.strip(' H!') # 移除空格、大写字母 H 和感叹2023-09-03 12:17:41 星期日号 ! print(stripped_text) # 输出: "ello, World"匹配子串:count()、index()、find()、incount()函数没有匹配到对象返回0，如果匹配到，则返回指定元素在列表中出现的次数。index()函数没有匹配到对象报错value Error，如果匹配到，则返回指定元素在列表中第一次出现的索引位置。find()函数没有匹配到对象返回-1，如果匹配到，则返回子字符串在原始字符串中第一次出现的索引位置。in没有匹配到对象返回false，如果匹配到，则返回True。countlist.count(element)其中：element 是要统计出现次数的元素。count() 方法返回指定元素在列表中出现的次数。fruits = ["apple", "banana", "cherry", "apple", "date", "apple"] # 统计 "apple" 出现的次数 apple_count = fruits.count("apple") print(apple_count) # 输出: 3 # 统计 "cherry" 出现的次数 cherry_count = fruits.count("cherry") print(cherry_…

邮件自动发送训练结果
type: item
date: 2022-05-11T12:11:00+00:00
description: 使用Python实现模型训练完成后自动向邮箱中发送训练结果。最基础的发送邮件的代码首先我们看最简单的用python实现发邮件功能的代码，运行以下代码可以实现向指定的接收邮箱发送一个主题为“Training finished”，正文内容为test的邮件。import smtplib from email.mime.text import MIMEText from email.header import Header from email.mime.image import MIMEImage from email.mime.multipart import MIMEMultipart def send_email(subject="No subject", content="I am boring"): mail_host = "smtp.163.com" # 邮箱的设置里的服务器地址 mail_user = "*****@163.com" # 发送邮件的邮箱 mail_pw = "*********" # 授权码，邮箱设置里开启POP3/SMTP服务，提供给你的密钥 sender = "******@163.com" # 发送邮件的邮箱， receiver = "******@icloud.com" # 接收邮件的邮箱 # Create the container (outer) email message. msg = MIMEText(content, "plain", "utf-8") msg['Subject'] = subject msg['From'] = sender msg['To'] = receiver try: smtp = smtplib.SMTP_SSL(mail_host, 994) # 实例化smtp服务器 smtp.login(mail_user, mail_pw) # 登录 smtp.sendmail(sender, receiver, msg.as_string()) print("Email send successfully") except smtplib.SMTPException: print("Error: email send failed") if __name__ == '__main__': send_email(subject="Training finished", content="Test")其中，mail_host为邮箱的服务器地址，我们可以在邮箱的POP3/SMTP/IMAP设置页面里找到。mail_user为发送邮件的邮箱，负责将你的训练结果作为邮件发出去。mail_pw为邮箱的授权码，在POP3/SMTP/IMAP设置页面可以找到。选择开启IMAP/SMTP服务，安全识别后会提供给你密钥。sender和mail_user一样，发送邮件的邮箱receiver为接收邮件的邮箱。运用到训练脚本以下代码是将发送邮件的代码加入到swin transformer的运行脚本中。代码的第13-38行，111，117，123，134行是加入的自动发送邮件的脚本。实现的是全部的epoch训练结束后，将每个epoch的损失和准确率发送到指定的邮箱里。如果需要每个epoch训练完都发送一次邮件的话，可以自己稍微改一下for循环那里。import os import argparse import torch import torch.optim as optim from torch.utils.tensorboard import SummaryWriter from torchvision import transforms from my_dataset import MyDataSet from model import swin_base_patch4_window7_224 as create_model from utils import read_split_data, train_one_epoch, evaluate import smtplib from email.mime.text import MIMEText from email.header import Header from email.mime.image import MIMEImage from email.mime.multipart import MIMEMultipart def send_email(subject="No subject", content="I am boring"): mail_host = "smtp.163.com" # 邮箱的设置里的服务器地址 ma…