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

如何从TXT文件提取名言段落生成列表并实现随机访问?

处理名言TXT文件并随机打印单条名言的解决方案

需求说明

你需要读取一个包含约1000条名言的TXT文件,每条名言格式示例如下:

No problem should ever have to be solved twice.
-- Eric S. Raymond, How to become a hacker
(中文对应格式:
任何问题都不应需要被解决两次。
—— 埃里克·S·雷蒙德,《如何成为一名黑客》)

目标是将每段完整名言作为列表中的独立元素,实现随机打印单条名言的功能。

现有代码问题分析

你当前的代码存在几个关键问题:

  1. 重复打开文件,且split()方法会将每行内容拆分为单词列表,无法保留完整的名言段落
  2. 最后对空列表lines执行循环操作,完全无效

修正方案

根据TXT文件的不同格式,提供两种可行方案:

方案一:不同名言间用空行分隔

如果文件中每条名言(内容+作者)之间用空行分隔,使用以下代码:

# 读取并处理文件
with open("quotes.txt", "r", encoding="utf-8") as file:
    # 按空行分割所有名言段落
    raw_quotes = file.read().split("\n\n")

# 清理无效内容,整理成名言列表
quote_list = []
for block in raw_quotes:
    cleaned = block.strip()
    if cleaned:
        quote_list.append(cleaned)

# 随机打印一条名言
import random
if quote_list:
    print(random.choice(quote_list))

方案二:名言连续排列(无空行分隔)

如果文件中每条名言是连续两行(内容行+作者行),无空行分隔,使用以下代码:

# 读取所有非空行
with open("quotes.txt", "r", encoding="utf-8") as file:
    lines = [line.strip() for line in file if line.strip()]

# 每两行组合为一条完整名言
quote_list = []
for i in range(0, len(lines), 2):
    if i + 1 < len(lines):
        full_quote = f"{lines[i]}\n{lines[i+1]}"
        quote_list.append(full_quote)

# 随机打印一条名言
import random
print(random.choice(quote_list))

代码说明

  • 使用with语句自动管理文件资源,避免手动关闭文件的遗漏
  • 两种方案均会过滤掉文件中的空行和无效内容,确保列表中只保留完整名言
  • 通过random.choice()实现随机选取并打印单条名言的功能

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.13 06:45:32