Python输入输出全解析:从命令行到文件读写
作者:梅琳marlin2026.11.06 20:09浏览量:0简介:本文系统讲解Python输入输出的核心知识,涵盖命令行工作目录的概念与查看方式、标准输入输出的基本用法、格式化输出的多种方案,以及文件读写的规范实践。通过清晰的代码示例与场景分析,帮助读者快速掌握Python I/O的关键技能,写出更健壮、可维护的程序。
Python 的输入与输出怎么做?
输入与输出(I/O)是程序与外界交互的桥梁。无论是从命令行读取用户指令,还是将处理结果写入文件,Python 都提供了简洁而强大的工具集。本文将从命令行环境的基础概念讲起,逐步深入到标准输入输出、格式化输出以及文件读写,帮助你建立完整的 I/O 知识体系。
一、先搞懂:命令行的工作目录是什么?
在讨论输入输出之前,有一个容易被忽略却非常关键的概念——工作目录(Working Directory)。它决定了程序中使用相对路径时,文件到底从哪里找、往哪里写。
很多初学者会遇到这样的困惑:明明代码里写的是 open("data.txt"),为什么有时能打开,有时却报 FileNotFoundError?答案往往就藏在工作目录的差异里。
工作目录取决于你如何打开命令行。以常见的操作系统为例:
- 通过系统菜单打开命令行:工作目录通常默认为当前用户的主目录,例如
C:\Users\<YourUserName>(Windows)或/home/<username>(Linux/macOS)。 - 在文件夹空白处右键选择”在终端中打开”:工作目录就是当前所在的文件夹。
- 在文件管理器地址栏直接输入命令行程序名并回车:效果与上一种相同,工作目录为当前文件夹。
也就是说,同一段代码在不同方式启动的命令行中运行,相对路径的解析结果可能完全不同。
如何查看当前工作目录?
Python 标准库中的 os 模块提供了跨平台的方法:
import osprint(os.getcwd())
os.getcwd() 会返回一个字符串,表示当前进程的工作目录。建议在涉及文件操作的脚本开头先打印一次,便于调试路径问题。
如果需要切换工作目录,可以使用:
os.chdir("/path/to/target")
不过在生产代码中,更推荐使用绝对路径或基于 __file__ 构造路径,而不是依赖 chdir,因为全局状态修改容易引发难以追踪的副作用。
二、标准输入:让程序”听懂”用户
Python 内置的 input() 函数是最常用的输入方式。它会暂停程序执行,等待用户在命令行输入一行文本并按下回车,然后以字符串形式返回。
name = input("请输入你的名字:")print(f"你好,{name}!")
需要注意几个细节:
input()的返回值永远是str类型。如果需要数字,必须显式转换,例如age = int(input("年龄:"))。- 转换时可能抛出
ValueError,健壮的代码应当捕获异常或做校验:
while True:try:age = int(input("请输入年龄:"))breakexcept ValueError:print("输入无效,请输入整数。")
- 在自动化脚本中,可以用
sys.stdin读取管道输入。例如:
import sysfor line in sys.stdin:print(line.strip().upper())
这种方式在编写命令行工具、处理日志流时非常实用。
三、标准输出:把结果呈现出来
最基础的输出函数是 print()。它的签名中包含 sep、end、file、flush 等参数,灵活运用可以应对多种场景:
print("a", "b", "c", sep="-") # a-b-cprint("加载中", end="", flush=True) # 不换行并立即刷新
当需要将输出重定向到文件或内存缓冲区时,可以指定 file 参数:
with open("out.txt", "w", encoding="utf-8") as f:print("日志内容", file=f)
四、格式化输出:三种主流方案
Python 的字符串格式化经历了多代演进,目前常用的有三种:
1. % 格式化(传统风格)
print("姓名:%s,年龄:%d" % (name, age))
2. str.format()(兼容性好)
print("姓名:{0},年龄:{1}".format(name, age))
3. f-string(推荐)
自 Python 3.6 起引入,语法最直观,运行时性能也较优:
print(f"姓名:{name},年龄:{age}")
f-string 还支持表达式、格式说明符,例如 f"{pi:.2f}" 保留两位小数。在多数现代项目中,f-string 应作为首选。
对于需要对齐表格的场景,可以结合格式说明符:
for k, v in data.items():print(f"{k:<10}{v:>8.2f}")
五、文件读写:持久化数据的基本功
文件操作的标准范式是使用 with 语句,确保文件在异常情况下也能正确关闭:
with open("data.txt", "r", encoding="utf-8") as f:content = f.read()
常见模式包括:
"r":只读,文件必须存在。"w":写入,会清空原内容。"a":追加,保留原内容。"x":独占创建,文件已存在则报错。"b":二进制模式,与上述模式组合使用。
读写方式的选择
read():一次性读取全部内容,适合小文件。readline():逐行读取,适合按行处理。readlines():返回行列表,方便迭代。- 直接迭代文件对象:内存效率最高,推荐用于大文件:
with open("big.log", "r", encoding="utf-8") as f:for line in f:process(line)
写入时同样可以使用 write() 或 writelines(),但要注意 write() 不会自动添加换行符。
编码问题
跨平台开发中最容易踩的坑之一就是编码。建议始终显式指定 encoding="utf-8",避免依赖系统默认编码导致乱码。
六、实践建议与常见误区
- 路径问题优先排查工作目录,必要时使用
os.path或pathlib构造绝对路径。 - 输入必须校验,不要假设用户会按预期输入。
- 格式化统一使用 f-string,提高可读性。
- 文件操作务必用
with,避免资源泄漏。 - 大量输出时考虑缓冲与 flush,尤其在交互式进度提示场景。
结语
Python 的输入输出体系看似简单,实则蕴含着从环境认知到异常处理、从编码规范到性能考量的多层知识。掌握工作目录的概念、熟练运用标准输入输出、选择合适的格式化方式、遵循文件操作的最佳实践,能让你的程序在真实环境中更加稳定可靠。希望本文能为你的 Python 之路提供一份清晰实用的参考。

登录后可评论,请前往 登录 或 注册