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

Python读取文本每行并分离数字与无数字内容的实现问题

解决方法

先说说你现有代码的几个问题:

  • while True没有终止逻辑,会无限循环,文件读完后还会一直读空内容
  • 语法错误:content.file.readline()完全不对,content已经是你读出来的行内容,没有这个方法;而且print语句的括号不匹配
  • 没定义正则pattern,也没初始化用来存数据的列表

下面是可以直接用的代码,实现你要的功能:

import re

# 初始化两个列表,分别存提取的数字和去数字后的文本
extracted_numbers = []
text_without_numbers = []

# 用with语句打开文件,自动处理关闭,避免资源泄漏
with open('your_file.txt', 'r', encoding='utf-8') as file:
    # 直接遍历文件的每一行,比readline循环更简洁
    for line in file:
        # 先去掉行尾的换行符和前后空白
        cleaned_line = line.strip()
        if not cleaned_line:  # 跳过空行
            continue
        
        # 提取该行所有数字,\d+匹配1个及以上数字,得到的是字符串列表
        numbers = re.findall(r'\d+', cleaned_line)
        # 如果需要转成整数,用下面这行替换上面的
        # numbers = [int(num) for num in re.findall(r'\d+', cleaned_line)]
        extracted_numbers.append(numbers)
        
        # 去除所有数字,得到纯文本
        pure_text = re.sub(r'\d+', '', cleaned_line).strip()
        text_without_numbers.append(pure_text)

# 测试输出结果
print("提取的数字:", extracted_numbers)
print("去数字后的文本:", text_without_numbers)

关键说明:

  • 用with open()是Python操作文件的最佳实践,不用手动写file.close()
  • re.findall(r'\d+', line)会把每行里所有连续的数字都提取出来,比如行内容是abc123def45,会得到['123', '45']
  • re.sub(r'\d+', '', line)会把所有数字替换为空字符串,再用strip()去掉替换后可能出现的多余空格
  • 如果你的数字包含小数,把正则里的\d+改成\d+\.?\d*就行

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.27 06:42:06