HOWTO · Python
如何在 Python 中使用 cat 命令
通过这份全面的指南,学习如何在 Python 中使用 cat 命令。探索使用 open 函数、pathlib 模块和 subprocess 等方法,高效地读取和操作文件。无论是初学者还是希望提升 Python 文件处理技能的经验丰富的程序员,都非常适合。
本页内容
Python 并不包含 cat 命令。要从 Python 显示文件,请使用 open() 或 pathlib;只有在确实需要那个 Unix 命令时,才用 subprocess 调用外部的 cat 工具。Python 的方法可跨平台工作,并且无需启动另一个进程。
使用 open() 读取并显示文件
将 open() 用作上下文管理器来读取文本文件。本例会自己创建输入文件,因此您可以原样运行。它指定了 UTF-8 编码,with 代码块会在读取后关闭文件。
运行此示例:
from pathlib import Path
from tempfile import TemporaryDirectory
with TemporaryDirectory() as directory:
file_path = Path(directory) / "example.txt"
file_path.write_text("First line.\nSecond line.\n", encoding="utf-8")
with open(file_path, "r", encoding="utf-8") as file:
print(file.read(), end="")
对于大文件,应避免将其全部内容读入一个字符串。改为迭代文件,例如使用 for line in file:,并在读取时逐行处理。
使用 pathlib 简洁地读取文件
当整个文本文件可以轻松放入内存时,pathlib.Path.read_text() 是一个简洁的替代方案。与上一个示例一样,本例也会自己创建输入,并明确指定编码。
from pathlib import Path
from tempfile import TemporaryDirectory
with TemporaryDirectory() as directory:
file_path = Path(directory) / "example.txt"
file_path.write_text("First line.\nSecond line.\n", encoding="utf-8")
print(file_path.read_text(encoding="utf-8"), end="")
这两种方法都会将字节解码为文本。请选择与文件匹配的编码;UTF-8 很常见,但来自其他系统的文件可能使用不同的编码。对于大文件,请使用 open() 并逐行增量处理,而不是加载整个文件。
需要 shell 命令时用 subprocess 运行 cat
如果工作流程特别需要 Unix 的 cat 工具,请使用 subprocess.run() 调用它,并将程序和文件路径作为单独的列表项传递。这样可以避免 shell 对路径进行解析。本例会检查该工具是否已安装,捕获其标准输出和错误,并在命令缺失时进行报告而不会失败。
from pathlib import Path
import shutil
import subprocess
from tempfile import TemporaryDirectory
with TemporaryDirectory() as directory:
file_path = Path(directory) / "example.txt"
file_path.write_text("First line.\nSecond line.\n", encoding="utf-8")
cat_program = shutil.which("cat")
if cat_program is None:
print("cat is not available on this system.")
else:
result = subprocess.run(
[cat_program, str(file_path)],
capture_output=True,
text=True,
encoding="utf-8",
check=False,
)
if result.returncode == 0:
print(result.stdout, end="")
else:
print(result.stderr, end="")
这会调用一个外部程序;它并不会使 cat 成为 Python 命令或文件读取 API。这个 Unix 工具通常不会安装在 Windows 上,因此对于可移植的脚本,应优先使用 Python 内置的文件 API。调用任何外部程序时,请保持参数彼此独立,并避免用不受信任的输入构造 shell 命令。示例可能显示的消息保持英文,因为代码块和输出块均保持原样不变。
结论
使用 open() 进行逐行处理或直接读取整个文件;当基于路径的 read_text() 方法能使代码更清晰时,使用 pathlib。只有在确实需要外部 Unix 工具本身时,才通过 subprocess 运行 cat。读取整个文件的方法所用的内存与文件大小成正比;大文件应增量处理。
FAQ
-
cat命令是什么?
它是一个显示或连接文件的 Unix 工具,并未内置于 Python。 -
我可以在 Windows 上运行
cat吗?
通常默认情况下不可用。Python 的open()和pathlib提供了可移植的文件读取方式;Windows 也有自己的 shell 命令,但它们不是 Unix 工具。 -
我应该使用
subprocess还是open()来读取文件?
一般的文件访问使用open()或pathlib。当您需要运行cat或其他外部程序时,使用subprocess。 -
这些方法能处理大文件吗?
使用read()或read_text()读取整个文件会将其内容存储在内存中。对于大文件,请使用open()并一次处理一行。