Python 作为一种功能强大的编程语言,不仅支持脚本开发和 Web 应用,还提供了丰富的工具用于命令行操作,处理多行输入和输出是命令行编程中的常见需求,例如需要从用户处获取多行文本、读取多行配置文件,或生成结构化的多行报告,本文将详细介绍 Python 在命令行环境下处理多行数据的方法,包括输入读取、输出格式化、多行字符串处理以及实用技巧,并通过示例代码和表格对比不同场景下的实现方式。

多行输入的读取方法
在命令行程序中,多行输入通常需要用户手动结束输入(如按 Ctrl+D 或输入特定终止符),Python 的 sys.stdin 模块和 input() 函数均可实现多行读取,但适用场景不同。
使用 sys.stdin 读取多行
sys.stdin 是一个文件对象,支持逐行读取或一次性读取所有内容,适合处理管道输入或重定向文件。
import sys
print("请输入多行文本(按 Ctrl+D 结束):")
lines = sys.stdin.readlines()
for line in lines:
print(f"读取到: {line.strip()}")
运行后,用户可连续输入多行文本,程序会逐行处理,若需动态读取(不等待用户输入结束),可使用 sys.stdin.readline() 循环读取,直到遇到空行或终止符。
使用 input() 循环读取
input() 函数每次读取一行,适合交互式场景,可通过循环实现多行输入,

lines = []
print("请输入多行文本(输入 'done' 结束):")
while True:
line = input()
if line == 'done':
break
lines.append(line)
print("\n您输入的内容:")
for line in lines:
print(line)
此方法需用户主动输入终止符(如 done),灵活性较高。
区分场景的输入方式对比
| 方法 | 适用场景 | 优点 | 缺点 |
|---|---|---|---|
sys.stdin.readlines() |
管道/文件重定向 | 自动处理所有输入 | 需等待输入结束 |
sys.stdin.readline() |
流式处理 | 实时读取 | 需手动控制终止条件 |
input() 循环 |
交互式输入 | 友好提示 | 需自定义终止逻辑 |
多行输出的格式化技巧
命令行输出的可读性至关重要,Python 提供多种方式生成格式化的多行文本,包括字符串拼接、模板化和表格化输出。
多行字符串拼接
使用 join() 方法或 运算符拼接多行字符串:
lines = ["第一行", "第二行", "第三行"] output = "\n".join(lines) print(output)
或通过三引号定义多行字符串:

output = """第一行 第二行 第三行""" print(output)
使用 textwrap 模块控制行长
对于长文本,textwrap 模块可自动换行:
import textwrap long_text = "这是一段很长的文本,需要被分割成多行显示。" wrapped = textwrap.fill(long_text, width=20) print(wrapped)
表格化输出
借助 tabulate 库可快速生成表格:
from tabulate import tabulate data = [["Name", "Age"], ["Alice", 25], ["Bob", 30]] print(tabulate(data, headers="firstrow"))
输出结果为对齐的表格,适合结构化数据展示。
多行字符串的进阶处理
Python 的多行字符串( 或 )常用于存储模板或代码块,需注意转义字符和缩进问题。
去除多余缩进
使用 textwrap.dedent() 可去除字符串前导缩进:
from textwrap import dedent
code = """
def hello():
print("Hello, World!")
"""
print(dedent(code))
多行字符串的变量插值
通过 f-string 或 str.format() 实现动态内容插入:
name = "Python"
version = "3.10"
info = f"""
Name: {name}
Version: {version}
Description: A popular programming language.
"""
print(info)
实用场景示例
从文件读取多行并处理
with open("input.txt", "r") as f:
lines = f.readlines()
processed = [line.strip().upper() for line in lines]
with open("output.txt", "w") as f:
f.write("\n".join(processed))
生成带边框的多行报告
def generate_report(data):
border = "+" + "-" * 30 + "+"
header = "|{: ^30}|".format("REPORT")
rows = [f"|{item: ^30}|" for item in data]
return "\n".join([border, header, border] + rows + [border])
print(generate_report(["Item 1", "Item 2", "Item 3"]))
相关问答 FAQs
Q1: 如何在 Python 命令行程序中实现带密码的多行输入?
A1: 可结合 getpass 模块隐藏密码输入,并通过循环收集多行数据。
from getpass import getpass
lines = []
while True:
line = input("输入内容(留空结束): ")
if not line:
break
password = getpass("输入密码: ")
lines.append((line, password))
Q2: 如何将 Python 多行输出保存到文件并保留格式?
A2: 使用文件写入模式(如 w 或 a),并通过 write() 方法直接写入多行字符串。
output = """Line 1
Line 2
Line 3"""
with open("output.txt", "w") as f:
f.write(output) 