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

如何在Python中读取指定文本文件并以表格形式提取关键词?

嘿,我来帮你搞定这个Python读取文件+关键词表格展示的需求!下面分步骤给你讲清楚怎么实现,代码都是可直接运行的:

1. 通过输入文件名读取文本文件

首先,我们可以用input()获取用户输入的文件名,再用Python的with语句安全读取文件(它会自动帮你关闭文件,避免资源泄漏)。这里还加了异常处理,防止文件找不到或者编码错误导致程序崩溃:

def read_text_file(file_name):
    try:
        # 优先用utf-8编码读取
        with open(file_name, 'r', encoding='utf-8') as file:
            return file.read()
    except FileNotFoundError:
        print(f"❌ 错误:找不到文件 '{file_name}',请检查文件名或路径是否正确")
        return None
    except UnicodeDecodeError:
        print(f"⚠️ 提示:utf-8编码读取失败,尝试用gbk编码重试")
        try:
            with open(file_name, 'r', encoding='gbk') as file:
                return file.read()
        except:
            print(f"❌ 无法读取文件 '{file_name}',请检查文件格式")
            return None

# 获取用户输入的文件名
file_name = input("请输入要读取的文本文件名(比如 'test.txt' 或 './data/article.txt'):")
content = read_text_file(file_name)
2. 提取文本中的关键词

关键词提取可以分基础版和进阶版:

基础版(纯Python实现,无需额外安装库)

这种方式适合快速处理英文文本,我们会先把文本转小写、去掉标点,过滤掉无意义的停用词(比如the、and),最后统计词频取Top N:

import string
from collections import Counter

def extract_keywords(text, top_n=10):
    # 文本预处理:转小写、移除标点
    text = text.lower()
    text = text.translate(str.maketrans('', '', string.punctuation))
    
    # 分割成单词列表
    words = text.split()
    
    # 定义停用词(可以根据需求自行添加)
    stop_words = {'the', 'and', 'of', 'a', 'to', 'in', 'is', 'it', 'you', 'that', 'this', 'on', 'for'}
    
    # 过滤停用词
    filtered_words = [word for word in words if word not in stop_words]
    
    # 统计词频,取top_n个关键词
    word_counts = Counter(filtered_words)
    return word_counts.most_common(top_n)

# 提取关键词(如果文件读取成功的话)
if content:
    keywords = extract_keywords(content)

进阶版(用专业NLP库,更准确)

如果需要处理更复杂的文本(比如分词更精准、支持更多语言),可以用nltk库。先安装依赖:pip install nltk,然后代码如下:

import nltk
from nltk.corpus import stopwords
from nltk.tokenize import word_tokenize
from collections import Counter

# 第一次运行需要下载必要的模型和停用词库
nltk.download('punkt')
nltk.download('stopwords')

def extract_keywords_advanced(text, top_n=10):
    # 智能分词(比split()更准确,能处理带连字符的单词等)
    words = word_tokenize(text.lower())
    
    # 获取英文停用词(如果处理中文可以用jieba库)
    stop_words = set(stopwords.words('english'))
    
    # 过滤停用词和非字母单词
    filtered_words = [word for word in words if word.isalpha() and word not in stop_words]
    
    # 统计词频
    word_counts = Counter(filtered_words)
    return word_counts.most_common(top_n)

# 调用进阶版提取函数
if content:
    keywords_advanced = extract_keywords_advanced(content)
3. 将关键词以表格形式展示

我们可以用两种方式输出表格:

基础版(纯Python打印,无需额外库)

自己实现简单的表格格式:

def print_simple_table(keywords):
    # 打印表头
    print(f"\n{'关键词':<15} {'出现次数':<10}")
    print("-" * 25)
    # 打印每行数据
    for word, count in keywords:
        print(f"{word:<15} {count:<10}")

# 打印表格
if content:
    print_simple_table(keywords)

进阶版(用tabulate库,美观的表格)

安装tabulate库:pip install tabulate,然后可以生成各种格式的表格(比如grid、markdown格式):

from tabulate import tabulate

def print_pretty_table(keywords):
    # 准备表格数据:表头+关键词数据
    table_data = [["关键词", "出现次数"]] + keywords
    # 打印grid格式的表格,也可以换成 'markdown'、'pretty' 等格式
    print("\n关键词统计结果:")
    print(tabulate(table_data, headers="firstrow", tablefmt="grid"))

# 打印美观表格
if content:
    print_pretty_table(keywords)
完整整合代码

把上面的功能整合到一起,就是一个完整的小工具:

import string
from collections import Counter
from tabulate import tabulate

def read_text_file(file_name):
    try:
        with open(file_name, 'r', encoding='utf-8') as file:
            return file.read()
    except FileNotFoundError:
        print(f"❌ 错误:找不到文件 '{file_name}'")
        return None
    except UnicodeDecodeError:
        print(f"⚠️ 提示:utf-8编码读取失败,尝试用gbk编码重试")
        try:
            with open(file_name, 'r', encoding='gbk') as file:
                return file.read()
        except:
            print(f"❌ 无法读取文件 '{file_name}'")
            return None

def extract_keywords(text, top_n=10):
    text = text.lower()
    text = text.translate(str.maketrans('', '', string.punctuation))
    words = text.split()
    stop_words = {'the', 'and', 'of', 'a', 'to', 'in', 'is', 'it', 'you', 'that', 'this', 'on', 'for'}
    filtered_words = [word for word in words if word not in stop_words]
    word_counts = Counter(filtered_words)
    return word_counts.most_common(top_n)

def print_pretty_table(keywords):
    table_data = [["关键词", "出现次数"]] + keywords
    print("\n关键词统计结果:")
    print(tabulate(table_data, headers="firstrow", tablefmt="grid"))

if __name__ == "__main__":
    file_name = input("请输入要读取的文本文件名:")
    content = read_text_file(file_name)
    if content:
        print("\n✅ 文件读取成功,正在提取关键词...")
        keywords = extract_keywords(content)
        print_pretty_table(keywords)

内容的提问来源于stack exchange,提问作者faezeT

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.28 06:20:06