18.8. 文档和报告¶
学习大纲
标准输入和输出。
字符串格式化。
发送电子邮件。
18.8.1. 1.标准输入和输出¶
一个stdin和stdout的一个示例程序。创建一个脚本,命名为stdin_stdout_example.py
#!/usr/bin/env python
# -*- coding: utf-8 -*-
import sys
print("Enter number1:")
a = int(sys.stdin.readline())
print("Enter number2:")
b = int(sys.stdin.readline())
c = a + b
sys.stdout.write("Result:%d" %c)
上面的示例程序使用stdin 和stdout
来获取输入并显示输出。sys.stdin. readline() 用于从stdin
读取输入数据。
input() 函数
str1 = input("Enter a string: ")
print("Entered string is: ", str1)
print()
#如果我们需要一个整数值,只需在input() 函数前添加int 关键字
a = int(input("Enter the value of a: "))
b = int(input("Enter the value of b: "))
c = a + b
print("Value of c is: ", c)
#如果使用input() 输入整数值和浮点数值,必须用int() 和float() 类型转换函数将接收到的字符串分别转换为整数值和浮点数值。
num1 = float(input("Enter num 1: "))
num2 = float(input("Enter num 2: "))
num3 = num1/num2
print("Value of num 3 is: ", num3)
18.8.2. 2. 字符串格式化¶
一种是使用string 类中的format()
方法,另一种是使用%运算符。
# 单一的格式化
print("{}, My name is John".format("Hi"))
str1 = "This is John. I am learning {} scripting language."
print(str1.format("Python"))
print("Hi, My name is Sara and I am {} years old !!".format(26))
# 复合格式化
str2 = "This is Mary {}. I work at {} Resource department. I am {} years old !!"
print(str2.format("Jacobs", "Human", 30))
print("Hello {}, Nice to meet you. I am {}.".format("Emily", "Jennifer"))
下面我们学习使用% 运算符进行字符串格式化。%
运算符包含特殊的格式化符号,以下是一些常用符号。
%d:十进制整数。%s:字符串。%f:浮点数。%c:字符。
现在我们来看一个示例
# 基本格式化
a = 10
b = 30
print("The values of a and b are %d %d" % (a, b))
c = a + b
print("The value of c is %d" % c)
str1 = 'John'
print("My name is %s" % str1)
x = 10.5
y = 33.5
z = x * y
print("The value of z is %f" % z)
print()
# 调整
name = 'Mary'
print("Normal: Hello, I am %s !!" % name)
print("Right aligned: Hello, I am %10s !!" % name)
print("Left aligned: Hello, I am %-10s !!" % name)
18.8.3. 3.发送电子邮件¶
该示例程序会通过Gmail邮箱给收件人发送一个包含简单文本的电子邮件
#!/usr/bin/env python
# -*- coding: utf-8 -*-
import smtplib
from email.mime.text import MIMEText
import getpass
host_name = 'smtp.gmail.com'
port = 465
u_name = 'username/emailid'
password = getpass.getpass()
sender = 'sender_name'
receivers = ['receiver1_email_address', 'receiver2_email_address']
text = MIMEText('Test mail')
text['Subject'] = 'Test'
text['From'] = sender
text['To'] = ', '.join(receivers)
s_obj = smtplib.SMTP_SSL(host_name, port)
s_obj.login(u_name, password)
s_obj.sendmail(sender, receivers, text.as_string())
s_obj.quit()
print("Mail sent successfully")
上面的示例程序使用自己的Gmail ID 给收件人发送了电子邮件。
变量u_name 存储收件人的用户名或电子邮件ID 。
变量password 存储密码,也可以使用getpass
模块提示输入密码,这里使用提示手动输入密码。
sender
变量存储发件人的姓名。现在把这封电子邮件发送给多个收件人,然后添加该电子邮件的主题。之后在login()
中使用了之前的用户名和密码变量,在sendmail()
中,给出了发件人、收件人和文本。如此,即可成功发送电子邮件。
发送带附件的电子邮件的示例程序
此示例程序将向收件人发送图像,这里依然通过Gmail
邮箱发送此邮件。创建一个脚本,命名为send_email_attachment.py
#!/usr/bin/env python
# -*- coding: utf-8 -*-
import os
import smtplib
from email.mime.text import MIMEText
from email.mime.image import MIMEImage
from email.mime.multipart import MIMEMultipart
import getpass
host_name = 'smtp.gmail.com'
port = 465
u_name = 'username/emailid'
password = getpass.getpass()
sender = 'sender_name'
receivers = ['receiver1_email_address', 'receiver2_email_address']
text = MIMEMultipart()
text['Subject'] = 'Test Attachment'
text['From'] = sender
text['To'] = ', '.join(receivers)
txt = MIMEText('Sending a sample image.')
text.attach(txt)
f_path = '/home/student/Desktop/mountain.jpg'
with open(f_path, 'rb') as f:
img = MIMEImage(f.read())
img.add_header('Content-Disposition',
'attachment',
filename=os.path.basename(f_path))
text.attach(img)
server = smtplib.SMTP_SSL(host_name, port)
server.login(u_name, password)
server.sendmail(sender, receivers, text.as_string())
print("Email with attachment sent successfully !!")
server.quit()
上面的示例程序将图像作为附件发送给收件人。程序指出了发件人和收件人的电子邮件ID
。接下来,在f_path
中指出了附件图像的文件路径。最后将该图像作为附件发送给收件人。
18.8.4. 总结¶
我们学习了标准输入和输出。
其中我们学习了stdin 和stdout
如何分别作为键盘输入和用户终端来使用,
还学习了input()和print() 函数以及使用format()
方法和% 运算符格式化字符串。
另外,我们还了解了如何通过Gmail邮箱向收件人发送电子邮件,其中发送了一封包含简单文本的电子邮件,也发送了包含附件的电子邮件。