惯性聚合 高效追踪和阅读你感兴趣的博客、新闻、科技资讯
阅读原文 在惯性聚合中打开

推荐订阅源

B
Blog RSS Feed
Security Archives - TechRepublic
Security Archives - TechRepublic
freeCodeCamp Programming Tutorials: Python, JavaScript, Git & More
小众软件
小众软件
V
V2EX
B
Blog
腾讯CDC
D
DataBreaches.Net
H
Hackread – Cybersecurity News, Data Breaches, AI and More
月光博客
月光博客
The Cloudflare Blog
T
The Blog of Author Tim Ferriss
云风的 BLOG
云风的 BLOG
Latest news
Latest news
L
LINUX DO - 最新话题
C
Check Point Blog
Attack and Defense Labs
Attack and Defense Labs
H
Hacker News: Front Page
Forbes - Security
Forbes - Security
H
Help Net Security
S
Securelist
D
Docker
Blog — PlanetScale
Blog — PlanetScale
Cyber Security Advisories - MS-ISAC
Cyber Security Advisories - MS-ISAC
钛媒体:引领未来商业与生活新知
钛媒体:引领未来商业与生活新知
The Last Watchdog
The Last Watchdog
N
News and Events Feed by Topic
G
Google Developers Blog
AI
AI
I
Intezer
L
LangChain Blog
NISL@THU
NISL@THU
Threat Intelligence Blog | Flashpoint
Threat Intelligence Blog | Flashpoint
人人都是产品经理
人人都是产品经理
Hugging Face - Blog
Hugging Face - Blog
罗磊的独立博客
T
Tenable Blog
Jina AI
Jina AI
I
InfoQ
C
Cybersecurity and Infrastructure Security Agency CISA
Cisco Talos Blog
Cisco Talos Blog
C
CERT Recently Published Vulnerability Notes
GbyAI
GbyAI
T
Tailwind CSS Blog
OSCHINA 社区最新新闻
OSCHINA 社区最新新闻
O
OpenAI News
让小产品的独立变现更简单 - ezindie.com
让小产品的独立变现更简单 - ezindie.com
Know Your Adversary
Know Your Adversary
T
Troy Hunt's Blog
Google Online Security Blog
Google Online Security Blog

博客园 - 箫笛

Tkinter - Entry 输入框组件 Tkinter - Button 组件 Tkinter - Label 组件 Tkinter - tk 变量 Tkinter - 事件与绑定 Tkinter - 几何管理器 Tkinter - 核心概念 Tkinter - 快速开始 Tkinter - 介绍 Python 编程 - 条件表达式 Python 编程 - 星号下划线参数释义 shell 编程 - shell 脚本的交互方式 Python insall - macOS 系统安装python的几种方式 Miniconda - Python 环境管理工具 Tkinter - Python GUI 开发 Python 编程 - 下划线命名的区别 Python 编程 - 元类编程 Python 编程 - 多重继承与MRO Python 编程 - 描述符协议 Python 编程 - 类型注解 Python 编程 - 生成器表达式 Python 编程 - 集合 Python 编程 - 装饰器 Python 编程 - 闭包 Python 编程 - 列表推导式 Python 编程 - 函数式编程 Python 编程 - lambda 函数 Python 编程 - 文件操作 Python 编程 - 面向对象编程 Python 编程 - 元组(tuple) Python 编程 - 字符串(str) Python 编程 - 字典(dict) Python 编程 - 列表(list) Python 编程 - 数据类型和数据结构 Python 编程 - 语句 Python 编程 - 函数 windows - WSL 的安装与使用 shell编程 - dialog 程序使用指南 FE Team - 如何做好前端代码审查 git 提交的撤销和恢复 React15 - redux-saga 如何在saga中实现轮询接口调用? React15 - React CSS Modules BEM命名实践 React15 - React 15 中 componentWillReceiveProps 为什么会多次调用, 同时componentDidUpdate 也会多次调用? React15 - React15类组件多次执行render方法的原因? React15 - React15应用中代码逻辑复用方案 React15 - React状态同步问题解决 React15 - React 15 中 React.pureComponent 的使用场景 React15 - React 15应用在页面渲染时会多次执行类组件的render 函数的原因 React15 - React 15 中能用 componetDidUpdate 代替 componentWillReceiveProps 吗? React15 - React 15 生命周期函数详解 React15 - 如何在React 15中实现自定义的事件订阅与发送(例如组件间通信) React15 - React15应用中的事件订阅和发送机制 React15 - CSS中的BEM规范 React15 - React CSS Modules BEM命名实践 React15 - 写sass 样式文件,嵌套的结构好,还是扁平的结构好? React15 - sass 中 @mixin 和 @extend 的区别是什么? React15 - React 15 应用 如何使用Css moudules 方式进行模块化开发 React15 - React15应用Sass使用指南 React15 - React 15 应用如何进行性能优化?
Python 编程 - 输入与输出
箫笛 · 2026-06-21 · via 博客园 - 箫笛

在 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)可以进一步探索。