菜鸟科技网

Python命令行如何实现多行输入?

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

Python命令行如何实现多行输入?-图1
(图片来源网络,侵删)

多行输入的读取方法

在命令行程序中,多行输入通常需要用户手动结束输入(如按 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() 函数每次读取一行,适合交互式场景,可通过循环实现多行输入,

Python命令行如何实现多行输入?-图2
(图片来源网络,侵删)
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)

或通过三引号定义多行字符串:

Python命令行如何实现多行输入?-图3
(图片来源网络,侵删)
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-stringstr.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: 使用文件写入模式(如 wa),并通过 write() 方法直接写入多行字符串。

output = """Line 1
Line 2
Line 3"""
with open("output.txt", "w") as f:
    f.write(output)
分享:
扫描分享到社交APP
上一篇
下一篇