You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何使用Python获取文本文件中指定内容所在的行号?

Python实现查找文本文件中指定内容的行号

当然可以做到!我给你写一个完全符合你需求的函数,还会把细节讲清楚,方便你调整和扩展。

先上代码:

def func(file_path, target_text):
    # 用with语句打开文件,自动处理关闭操作,更安全
    with open(file_path, 'r', encoding='utf-8') as file:
        # enumerate从1开始计数,正好对应我们日常的行号
        for line_num, line in enumerate(file, start=1):
            # 去除每行的换行符和前后空白,避免因格式问题匹配失败
            cleaned_line = line.strip()
            if cleaned_line == target_text:
                return line_num
    # 如果遍历完文件都没找到目标,返回None(你也可以改成返回0或者提示字符串)
    return None

代码解释:

  • 文件操作:with open()是Python处理文件的推荐方式,它会在代码块结束后自动关闭文件,不用手动调用file.close(),避免资源泄漏。
  • 行号计数:enumerate(file, start=1)是核心——它会逐行读取文件,同时给每行分配一个从1开始的序号,完美对应你要的行号(默认enumerate从0开始,所以指定start=1很重要)。
  • 内容匹配:line.strip()用来清理每行的换行符\n和可能的前后空格,比如你的文件里每行实际存储是abc\n,清理后就变成abc,这样和目标文本"ghi"对比时不会因为换行符导致匹配失败。

测试示例:

假设你的textfile.txt内容是:

abc
deff
ghi
jkl
EOF

调用func("textfile.txt", "ghi")就会直接返回3,完全符合你的预期。

额外扩展建议:

  • 如果你的文件中有多个相同的目标文本,想返回所有行号,可以把函数改成这样:
    def func(file_path, target_text):
        matching_lines = []
        with open(file_path, 'r', encoding='utf-8') as file:
            for line_num, line in enumerate(file, start=1):
                if line.strip() == target_text:
                    matching_lines.append(line_num)
        return matching_lines if matching_lines else None
    
    这样调用后会返回所有匹配的行号列表,比如如果ghi出现两次,就返回[3, x]。
  • 如果你的文件编码不是UTF-8(比如GBK),记得把encoding='utf-8'改成对应的编码格式。

内容的提问来源于stack exchange,提问作者Mario Ibáñez

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.21 03:53:40