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

Python文件解析:无法捕获换行字符串,需提取书籍作者

解决你的书籍数据解析问题:提取作者 + 修复换行捕获bug

嘿,我来帮你搞定这两个问题——从那56900条书籍记录里精准提取作者,同时解决Python读取文件时抓不到换行字符串的坑。

一、先搞定换行捕获的问题

你说Python解析时无法捕获换行字符串,大概率是读取文件的方式不对。很多人用readlines()的时候,容易忽略混合换行(比如Windows的\r\n和Linux的\n)的情况,或者没把整个文件内容读进来。

最稳妥的做法是一次性读取整个文件,这样所有换行符都会被完整保留:

# 读取完整文件内容,保留所有换行和格式细节
with open("你的书籍文件.txt", "r", encoding="utf-8") as f:
    full_content = f.read()

# 统一换行符(如果文件里有混合的\r\n和\n,转成统一的\n)
full_content = full_content.replace("\r\n", "\n")

这样处理后,你拿到的full_content就包含了所有换行,不会漏掉任何一行的边界信息,后续解析就靠谱多了。

二、提取作者信息的正则方案

从你给的示例来看,记录格式有几种变体,但核心规律是:作者名字前面会有“by”(英文)或者对应语言的等价词(比如芬兰语的mennessä),后面跟着ETEXT编号(5位数字)或者换行。

我给你写个灵活的正则表达式,能覆盖这些情况:

(?:by|mennessä)\s+([^0-9\n]+)

正则拆解:

  • (?:by|mennessä):匹配“by”或者芬兰语的“mennessä”,用非捕获组避免多余的匹配结果;
  • \s+:匹配一个或多个空白字符(空格、制表符都算);
  • ([^0-9\n]+):捕获作者名字——匹配除了数字(ETEXT编号)和换行(下一条记录)之外的所有字符,精准定位作者。

完整Python代码

结合上面的文件读取,把提取逻辑整合起来:

import re

# 读取并预处理文件
with open("你的书籍文件.txt", "r", encoding="utf-8") as f:
    full_content = f.read()
    full_content = full_content.replace("\r\n", "\n")

# 定义正则,可扩展添加其他语言的"by"等价词(比如法语par、德语von)
author_regex = re.compile(r'(?:by|mennessä)\s+([^0-9\n]+)', re.IGNORECASE)

# 提取所有作者
raw_authors = author_regex.findall(full_content)

# 清理作者名字(去掉前后空格、末尾多余的逗号)
clean_authors = [author.strip().rstrip(',') for author in raw_authors]

# 输出或保存结果
# 打印前10条看看效果
for i, author in enumerate(clean_authors[:10], 1):
    print(f"第{i}条作者:{author}")

# 保存到文件
with open("提取的作者列表.txt", "w", encoding="utf-8") as f:
    f.write("\n".join(clean_authors))

针对特殊情况的优化

如果遇到作者名字里带数字(极少情况),或者编号不是5位,可以把正则改成更精准的版本,匹配到编号前就停止:

(?:by|mennessä)\s+(.+?)(?=\s+\d{5}|\n|$)

这个版本的意思是:匹配前缀后的内容,直到遇到“5位数字”、换行或者文本结尾,完美避开编号干扰。

另外,如果有其他语言的书籍,比如法语的par,直接把它加到正则的非捕获组里就行:(?:by|mennessä|par)。

三、测试验证

拿你给的示例文本跑代码,输入:

Aspects of plant life; with special reference to the British flora, 56900 by Robert Lloyd Praeger
The Vicar of Morwenstow, by Sabine Baring-Gould 56899 [Subtitle: Being a Life of Robert Stephen Hawker, M.A.]
Raamatun tutkisteluja IV, mennessä Charles T. Russell 56898 [Subtitle: Harmagedonin taistelu] [Language: Finn...

输出的作者列表会是:

Robert Lloyd Praeger
Sabine Baring-Gould
Charles T. Russell

完全符合预期。


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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.26 09:18:26