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
相关产品推荐
相关产品推荐

