Python 编程 - 输入与输出

在 Python 3 中,输入与输出(I/O)是编程中最基础的操作之一。无论是与用户交互、读取文件,还是将数据打印到控制台,Python 都提供了简洁、强大的内置函数和标准库支持。本文将系统地介绍 Python 3 中的输入与输出,涵盖控制台 I/O、文件 I/O、格式化输出以及相关的高级用法。


1. 控制台输入:input()

input() 函数用于从标准输入(通常是键盘)读取一行文本,并将其作为字符串返回(末尾的换行符会被自动去除)。

name = input("请输入您的名字:")
print("你好," + name)
  • 可以传入一个字符串作为提示信息(prompt),该信息会直接打印在输入光标前。
  • 读取到的内容始终是 字符串 类型。如果需要整数、浮点数等,必须显式进行类型转换:
age = int(input("请输入年龄:"))          # 转为整数
height = float(input("请输入身高(米):")) # 转为浮点数

注意:若输入无法转换为目标类型,程序会抛出 ValueError,实际开发中应使用 try...except 进行异常处理。


2. 控制台输出:print()

print() 函数用于将对象输出到标准输出(默认是屏幕)。其完整签名如下:

print(*objects, sep=' ', end='\n', file=sys.stdout, flush=False)
  • *objects:一个或多个要打印的对象,Python 会自动调用 str() 将其转换为字符串。
  • sep:分隔符,默认为一个空格。例如 print(1, 2, 3, sep='-') 输出 1-2-3
  • end:结尾字符串,默认为换行符 \n。可以改成其他字符,如 print("Hello", end='') 则不换行。
  • file:指定输出流,默认是 sys.stdout,可以重定向到文件或其它类文件对象。
  • flush:是否强制刷新缓冲区,默认为 False
print("Python", 3, "入门", sep=" | ")   # 输出:Python | 3 | 入门
print("进度", end="...")               # 不换行
print("完成")                          # 接着上一行输出:进度...完成

3. 格式化输出

在实际开发中,我们经常需要将变量插入到字符串中。Python 3 提供了三种主流方式。

3.1 旧式 % 格式化(C 风格)

name = "Alice"
age = 25
print("我的名字是 %s,今年 %d 岁。" % (name, age))

3.2 str.format() 方法

更强大、更灵活,使用 {} 占位符。

print("我的名字是 {},今年 {} 岁。".format(name, age))
# 可指定位置参数
print("我的名字是 {0},今年 {1} 岁。".format(name, age))
# 也可使用关键字参数
print("我的名字是 {n},今年 {a} 岁。".format(n=name, a=age))

3.3 f-string(字面量格式化字符串,Python 3.6+)

最简洁、推荐的方式。在字符串前加 f,然后在 {} 内直接写表达式。

print(f"我的名字是 {name},今年 {age} 岁。")
# 还可以调用方法或计算
print(f"明年我将 {age + 1} 岁。")

4. 文件输入与输出

Python 通过内置的 open() 函数打开文件,返回文件对象,然后进行读写操作。

4.1 打开文件

f = open('data.txt', 'r', encoding='utf-8')  # 只读模式,指定编码

常用模式:

  • 'r':只读(默认)
  • 'w':写入(会覆盖已有内容)
  • 'a':追加(在文件末尾添加)
  • 'x':独占创建,如果文件存在则失败
  • 'b':二进制模式(如 'rb''wb'
  • '+':读写模式(如 'r+'

4.2 读取文件

  • read(size):读取指定字节数,不指定则读取全部。
  • readline():读取一行。
  • readlines():读取所有行,返回字符串列表。
with open('data.txt', 'r', encoding='utf-8') as f:
    content = f.read()
    print(content)

使用 with 语句(上下文管理器)可以确保文件自动关闭,推荐使用。

4.3 写入文件

  • write(string):写入字符串。
  • writelines(list):写入多个字符串(不自动添加换行符)。
with open('output.txt', 'w', encoding='utf-8') as f:
    f.write("第一行\n")
    f.write("第二行\n")

5. 标准流对象:sys.stdinsys.stdoutsys.stderr

Python 的 sys 模块提供了标准输入、输出、错误流。input() 本质上是 sys.stdin.readline() 的简化,print() 默认写入 sys.stdout

import sys

# 从标准输入读取一行
line = sys.stdin.readline()
# 直接写入标准输出
sys.stdout.write("Hello\n")
# 写入错误流
sys.stderr.write("出错了!\n")

这些对象可以被重定向,例如将输出写入文件或管道,用于脚本间的数据传递。


6. 输入输出中的异常处理

  • 读取文件时可能引发 FileNotFoundErrorPermissionError 等。
  • 类型转换输入时可能引发 ValueError
  • 建议使用 try...except 进行容错处理:
try:
    num = int(input("输入整数:"))
    print(f"平方是 {num**2}")
except ValueError:
    print("输入无效,请输入整数。")

7. Python 2 与 Python 3 的区别

  • 在 Python 2 中,input() 会尝试将输入当作 Python 表达式求值(不安全且易错),而 raw_input() 才返回字符串。Python 3 将 raw_input() 重命名为 input(),并移除了旧版的 input()
  • Python 3 中 print 是一个函数(需要括号),而 Python 2 中 print 是一条语句。

8. 小贴士

  • 使用 print("内容", end="") 可实现同一行覆盖输出(配合 \r 实现进度条效果)。
  • 读写大文件时,推荐使用循环逐行读取,避免一次性加载全部内容占用内存。
  • 始终指定文件编码(如 utf-8)以避免跨平台乱码问题。

总结

Python 3 的输入输出机制设计得简洁而强大:

  • input()print() 满足绝大多数交互需求;
  • 多种格式化方式(尤其是 f-string)让字符串拼接更加优雅;
  • 文件操作配合 with 语句安全高效;
  • sys 流对象提供了底层控制能力。

掌握这些基本工具,即可轻松处理 Python 程序中的数据流动。如果有更具体的使用场景(如 JSON 序列化、二进制数据处理、管道通信等),还有专门的库(如 jsonpicklesubprocess)可以进一步探索。

posted @ 2026-06-21 11:36  箫笛  阅读(28)  评论(0)    收藏  举报