Skip to content

Latest commit

 

History

History
209 lines (137 loc) · 13 KB

File metadata and controls

209 lines (137 loc) · 13 KB

八、文件和报告

在本章中,您将学习如何使用 Python 记录和报告信息。您还将学习如何使用 Python 脚本获取输入以及如何打印输出。在 Python 中编写接收电子邮件的脚本更容易。您将学习如何格式化信息。

在本章中,您将了解以下内容:

  • 标准输入和输出
  • 信息格式
  • 发送电子邮件

标准输入和输出

在本节中,我们将学习 Python 中的输入和输出。我们将学习stdinstdout以及input()函数。

stdinstdout是类似文件的对象。这些对象由操作系统提供。当用户在交互会话中运行程序时,stdin作为输入,stdout将作为用户的终端。由于stdin是一个类似文件的对象,我们必须从stdin读取数据,而不是在运行时读取数据。stdout用于输出。它用作表达式和print()函数的输出,以及input()函数的提示。

现在,我们将看到一个stdinstdout的示例。为此,创建一个脚本stdin_stdout_example.py,并在其中写入以下内容:

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)

运行脚本,您将获得如下输出:

student@ubuntu:~/work$ python3 stdin_stdout_example.py Enter number1: 10 Enter number2: 20 Result: 30

在前面的示例中,我们使用了stdinstdout获取输入并显示输出。sys.stdin.readline()将从stdin读取。将写入数据。

现在我们来学习一下input()print()函数。input()功能用于获取用户的输入。该函数有一个可选参数:提示字符串。

语法:

 input(prompt)

input()函数返回一个字符串值。如果您想要一个数值,只需在input()之前写上“int关键字即可。您可以按如下方式执行此操作:

 int(input(prompt))

类似地,您可以为浮点值写入float。现在,我们来看一个例子。创建一个input_example.py脚本,并在其中编写以下代码:

str1 = input("Enter a string: ") print("Entered string is: ", str1) print() 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) print() num1 = float(input("Enter num 1: ")) num2 = float(input("Enter num 2: ")) num3 = num1/num2 print("Value of num 3 is: ", num3)

运行脚本,您将获得如下输出:

student@ubuntu:~/work$ python3 input_example.py Output: Enter a string: Hello Entered string is:  Hello Enter the value of a: 10 Enter the value of b: 20 Value of c is:  30Enter num 1: 10.50 Enter num 2: 2.0 Value of num 3 is:  5.25

在前面的示例中,我们对三个不同的值使用了input()函数。第一个用于字符串,第二个用于整数值,第三个用于float值。要将input()用于整数和浮点,我们必须使用int()float()类型的转换函数将接收到的字符串分别转换为整数和浮点。

现在,使用print()功能输出数据。我们必须输入一个逗号分隔的参数列表。在input_example.py中,为了得到输出,我们使用了print()函数。使用print()功能,您只需将数据封装在" "' '中,即可将其写入屏幕。要仅访问该值,只需在print()函数中写入变量名即可。如果您想在同一个print()函数中写入一些文本并访问一个值,那么在它们之间加一个逗号将它们分开。

我们将看一个简单的print()函数示例。创建一个print_example.py脚本,并在其中写入以下内容:

# printing a simple string on the screen. print("Hello Python") # Accessing only a value. a = 80 print(a)  # printing a string on screen as well as accessing a value. a = 50 b = 30 c = a/b print("The value of c is: ", c)

运行脚本,您将获得如下输出:

student@ubuntu:~/work$ python3 print_example.py Hello Python 80 The value of c is:  1.6666666666666667

在前面的示例中,首先,我们只是在屏幕上打印一个字符串。接下来,我们刚刚访问了a的值并将其打印在屏幕上。最后,我们输入ab的值,然后将它们相加并将结果存储在变量c中,然后我们打印一条语句并从相同的print()函数中访问一个值。

信息格式

在本节中,我们将学习字符串格式。我们将学习如何以两种方式格式化信息:一种是使用 stringformat()方法,另一种是使用%操作符。

首先,我们将学习使用 stringformat()方法设置字符串格式。string类的这个方法允许我们进行值格式化。它还允许我们进行变量替换。这将通过位置参数连接元素。

现在,我们将学习如何使用格式化程序进行格式化。调用此方法的字符串可以包含由大括号{}分隔的文本或替换字段。格式化字符串时可以使用多对{}。此替换字段包含参数的索引或参数的名称。因此,您将获得一个字符串的副本,其中每个替换字段都替换为参数的字符串值。

现在,我们来看一个字符串格式的示例。

创建一个format_example.py脚本,并在其中写入以下内容:

# Using single formatter 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)) # Using multiple formatters 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"))

按如下方式运行脚本:

student@ubuntu:~/work$ python3 format_example.py Output: Hi, My name is John This is John. I am learning Python scripting language. Hi, My name is Sara and I am 26 years old !! This is Mary Jacobs. I work at Human Resource department. I am 30 years old !! Hello Emily, Nice to meet you. I am Jennifer.

在前面的示例中,我们使用string类的format()方法使用单个和多个格式化程序进行字符串格式化。

现在,我们将学习使用%运算符设置字符串格式。%运算符使用了格式符号。以下是一些常用的符号:

  • %d:十进制整数
  • %s:字符串
  • %f:浮点数
  • %c:字符

现在,我们来看一个例子。创建一个string_formatting.py脚本,并在其中写入以下内容:

# Basic formatting 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() # aligning 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) print() # truncating print("The truncated string is %.4s" % ('Examination')) print() # formatting placeholders students = {'Name' : 'John', 'Address' : 'New York'} print("Student details: Name:%(Name)s Address:%(Address)s" % students) 

运行脚本,您将获得如下输出:

student@ubuntu:~/work$ python3 string_formatting.py The values of a and b are 10 30 The value of c is 40 My name is John The value of z is 351.750000Normal: Hello, I am Mary !! Right aligned: Hello, I am       Mary !! Left aligned: Hello, I am Mary       !!
The truncated string is Exam
Student details: Name:John Address:New York

在前面的示例中,我们使用了%操作符来格式化字符串:%d表示数字,%s表示字符串,%f表示浮点数。然后,我们将字符串左右对齐。我们还学习了如何使用%运算符截断字符串。%.4s将仅显示前四个字符。接下来,我们创建了一个名为students的字典,并输入了NameAddress键值对。接下来,我们在%操作符后面放置键名以获取字符串。

发送电子邮件

在本节中,我们将学习如何通过 Python 脚本从 Gmail 发送电子邮件。为此,Python 有一个名为smtplib的模块。Python 中的smtplib模块提供 SMTP 客户端会话对象,用于向任何具有 SMTP 侦听器的 internet 计算机发送电子邮件。

我们将看一个例子。在本例中,我们将从 Gmail 向收件人发送一封包含简单文本的电子邮件。

创建一个send_email.py脚本,并在其中写入以下内容:

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")

按如下方式运行脚本:

student@ubuntu:~/work$ python3 send_text.py

输出:

Password: Mail sent successfully

在前面的例子中,我们已经从 Gmail ID 向接收者发送了一封电子邮件。用户名变量将存储您的电子邮件 ID。在密码变量中,您可以输入密码,也可以使用getpass模块提示输入密码。在这里,我们提示输入密码。接下来,sender 变量将包含您的名称。现在我们将向多个接收者发送此电子邮件。然后,我们在邮件中加入了主题、发件人和收件人。然后在login(),中,我们提到了用户名和密码变量。接下来,在sendmail()中,我们提到了发送者、接收者和文本变量。因此,使用这个过程,我们成功地发送了电子邮件。

现在,我们将再看一个发送带有附件的电子邮件的示例。在本例中,我们将向收件人发送一个图像。我们将通过 Gmail 发送此邮件。创建一个send_email_attachment.py脚本,并在其中写入以下内容:

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()

按如下方式运行脚本:

student@ubuntu:~/work$ python3 send_email_attachment.py

输出:

Password: Email with attachment sent successfully!!

在前面的示例中,我们将图像作为附件发送给接收者。我们提到了发件人和收件人的电子邮件 ID。接下来,在f_path中,我们提到了作为附件发送的图像的路径。接下来,我们将该图像作为附件发送到接收器。

In the previous two examples – send_text.py and send_email_attachment.py– we sent email via Gmail. You can send via any other email providers. To use any other email provider, just write that provider name in host_name. Don’t forget to add smtp before it. In these example, we used smtp.gmail.com; for Yahoo! you can use smtp.mail.yahoo.com. So, you can change the hostname as well as the port, according to your email providers.

总结

在本章中,我们学习了标准输入和输出。我们学习了stdinstdout如何分别作为键盘输入和用户终端。我们还学习了input()print()函数。除此之外,我们还了解了如何从 Gmail 向收件人发送电子邮件。我们发送了一封带有简单文本的电子邮件,还发送了一份附件。此外,我们还学习了使用format()方法和%运算符进行字符串格式化。

在下一章中,您将学习如何使用不同的文件,如 PDF、Excel 和csv.

问题

  1. stdin和输入有什么区别?
  2. 什么是 SMTP?
  3. 下面的输出是什么?
>>> name = "Eric"
>>> profession = "comedian"
>>> affiliation = "Monty Python"
>>> age = 25
>>> message = (
...     f"Hi {name}. "
...     f"You are a {profession}. "
...     f"You were in {affiliation}."
... )
>>> message
  1. 下面的输出是什么?
str1 = 'Hello'
str2 ='World!'
print('str1 + str2 = ', str1 + str2)
print('str1 * 3 =', str1 * 3)

进一步阅读

  1. string文件:https://docs.python.org/3.1/library/string.html
  2. smptplib文件:https://docs.python.org/3/library/smtplib.html