在 Python 中处理输入和输出

PythonBeginner
立即练习

介绍

在这个 Lab 中,你将学习处理 Python 中输入和输出的基本概念。我们将探讨如何使用 print() 函数向控制台显示信息,以及如何从键盘获取用户输入。

此外,你还将获得将数据写入文件和从文件中读取数据的实践经验。对于任何需要与用户交互或处理存储在文件中的数据的 Python 程序来说,这些都是必不可少的技能。

这是一个实验(Guided Lab),提供逐步指导来帮助你学习和实践。请仔细按照说明完成每个步骤,获得实际操作经验。根据历史数据,这是一个 初级 级别的实验,完成率为 100%。获得了学习者 100% 的好评率。

向控制台打印字符串

在 Python 中,用于向控制台显示输出的主要函数是 print()。它的用法很简单。在这一步,你将练习使用 print() 来显示文本。

首先,在 WebIDE 左侧的文件浏览器中找到 output.py 文件。双击它在编辑器中打开。

将以下代码行添加到 output.py 中:

print("Hello, LabEx!")
print("This is a Python course.")

保存文件(你可以使用 Ctrl+S 快捷键)。要运行此脚本,请在 WebIDE 底部打开终端,并执行以下命令。终端应该已经在 ~/project 目录下。

python ~/project/output.py

你将在终端中看到以下输出:

Hello, LabEx!
This is a Python course.

print() 函数也可以接受多个用逗号分隔的参数。默认情况下,它会用单个空格将它们隔开并打印出来。

修改 output.py 文件,将其内容替换为以下行:

print("Apple", "Banana", "Orange", "Grape", "Watermelon")

保存文件并再次从终端运行它:

python ~/project/output.py

输出将是:

Apple Banana Orange Grape Watermelon

你可以使用 sep 参数来自定义分隔符。sep 的默认值是一个空格 (' ')。让我们将其更改为竖线(vertical bar)。

再次修改 output.py

print("Apple", "Banana", "Orange", "Grape", "Watermelon", sep=" | ")

保存并运行脚本:

python ~/project/output.py

输出现在使用了你自定义的分隔符:

Apple | Banana | Orange | Grape | Watermelon

这演示了如何控制控制台输出的格式。

从键盘获取用户输入

到目前为止,我们的脚本只显示了预定义的内容。为了使程序更具交互性,我们需要从用户那里获取输入。在 Python 中,你可以使用 input() 函数来实现这一点。

在 WebIDE 的文件浏览器中找到并打开 interactive.py 文件。将以下代码添加到其中:

name = input("Please enter your name: ")
print("Your name is:", name)

input() 函数向用户显示一个提示(你传递给它的字符串),并等待他们输入一些内容并按 Enter 键。用户输入的内容随后作为字符串返回,我们将其存储在 name 变量中。

保存文件并从终端运行脚本:

python ~/project/interactive.py

脚本将暂停并显示提示。输入一个名字并按 Enter 键。

Please enter your name: Labex User
Your name is: Labex User

脚本捕获了你的输入,并在最后的 print() 语句中使用了它。这是创建交互式命令行应用程序的基本技术。

将数据写入文件

读取和写入文件是常见且必要的 I/O(输入/输出)操作。Python 提供了内置的 open() 函数来处理文件。

基本语法是 open(filename, mode)mode 参数指定了文件的使用方式。常见模式包括:

  • 'w':写入模式(Write mode)。为写入创建一个新文件。如果文件已存在,其内容将被清除。
  • 'r':读取模式(Read mode)。打开一个现有文件进行读取。这是默认模式。
  • 'a':追加模式(Append mode)。打开一个文件以在末尾添加内容。如果文件不存在,则会创建它。

处理文件的推荐方法是使用 with 语句,它会自动为你关闭文件,即使发生错误也是如此。

让我们通过向文件写入一些文本来练习。在 WebIDE 编辑器中打开 file_io.py 文件,并添加以下代码:

with open("book.txt", "w") as f:
    f.write("Bed before bright moonlight,\n")
    f.write("Suspected to be frost on the ground.\n")
    f.write("Head held high, gazing at the bright moon,\n")
    f.write("Head bowed low, thinking of my homeland.")

此代码以写入模式('w')打开一个名为 book.txt 的文件。f.write() 方法将字符串写入文件。\n 字符代表一个换行符,因此每次 write 调用都会在新的一行结束。

保存文件并从终端运行脚本:

python ~/project/file_io.py

此命令不会产生任何控制台输出,但它会在你的 ~/project 目录下创建一个名为 book.txt 的新文件。你可以使用终端中的 cat 命令查看其内容:

cat ~/project/book.txt

输出应该是你写入文件的文本:

Bed before bright moonlight,
Suspected to be frost on the ground.
Head held high, gazing at the bright moon,
Head bowed low, thinking of my homeland.

使用 with 语句是一种最佳实践,因为它确保在代码块执行完毕后文件被正确关闭。

从文件读取数据

既然我们已经创建并写入了 book.txt,现在让我们学习如何读取它的内容。Python 提供了几种读取文件的方法。我们将探讨最常用的几种。

我们将继续使用 file_io.py 脚本。你将添加代码来读取刚刚创建的文件。

read() 方法

read() 方法读取文件的全部内容,并将其作为一个单独的字符串返回。

将以下代码追加到 file_io.py 脚本的末尾。这将使脚本首先写入文件,然后将其读回并打印其内容。

## The writing code from the previous step should be above this

print("\n--- Reading entire file with read() ---")
with open("book.txt", "r") as f:
    content = f.read()
    print(content)

保存文件并从终端运行它:

python ~/project/file_io.py

输出现在将包括打印到控制台的 book.txt 的内容:

--- Reading entire file with read() ---
Bed before bright moonlight,
Suspected to be frost on the ground.
Head held high, gazing at the bright moon,
Head bowed low, thinking of my homeland.

逐行迭代

读取文件(尤其是大文件)更节省内存的方法是逐行处理它。你可以通过在 for 循环中直接迭代文件对象来实现这一点。

现在,将接下来的代码块追加到 file_io.py

print("\n--- Reading file line by line ---")
with open("book.txt", "r") as f:
    for line in f:
        print(line, end='')

在这里,print() 函数中的 end='' 阻止了它添加额外的换行符,因为从文件中读取的每一行本身已经以换行符(\n)结尾。

再次保存并运行脚本:

python ~/project/file_io.py

此部分的输出将与 read() 方法的输出相同,但底层过程不同,它是一次读取一行。

readlines() 方法

readlines() 方法读取文件中的所有行,并将它们作为字符串列表返回。

最后,将最后这段代码追加到 file_io.py

print("\n\n--- Reading all lines with readlines() ---")
with open("book.txt", "r") as f:
    all_lines = f.readlines()
    print(all_lines)

保存并最后一次运行脚本:

python ~/project/file_io.py

此部分的输出将是一个 Python 列表,其中每个元素都是一个代表文件中一行的字符串:

--- Reading all lines with readlines() ---
['Bed before bright moonlight,\n', 'Suspected to be frost on the ground.\n', 'Head held high, gazing at the bright moon,\n', 'Head bowed low, thinking of my homeland.']

你现在已经练习了在 Python 中写入和读取文件的基本方法。

总结

在这个实验(Lab)中,你学习了处理 Python 中输入和输出的基本技术。你首先使用了 print() 函数向控制台显示格式化文本,包括如何自定义分隔符。然后,你通过 input() 函数从键盘捕获用户输入,使你的程序更具交互性。

最后,你探索了文件 I/O(输入/输出)操作。你学会了如何使用推荐的 with 语句,以写入模式(write mode)通过 open() 将数据写入文件。你也练习了使用各种方法从文件中读取数据,包括 read()、逐行迭代和 readlines()。这些技能是构建与用户和数据交互的更复杂 Python 应用程序的基础。