处理思路
- 逐行读取文件:由于文件非常大,一次性读取整个文件到内存可能导致内存溢出,所以选择逐行读取文件内容。
- 使用正则表达式匹配:利用
re.match
方法来匹配每行中 ID
部分。re.match
从字符串的起始位置开始匹配,适合我们这种每行格式固定的情况。
关键代码示例
import re
def extract_ids(file_path):
id_pattern = re.compile(r'ID:(\d+)')
with open(file_path, 'r', encoding='utf-8') as file:
for line in file:
match = id_pattern.match(line)
if match:
yield match.group(1)
# 使用示例
file_path = 'your_large_text_file.txt'
for id_value in extract_ids(file_path):
print(id_value)
性能优化原因
- 逐行读取:避免一次性将整个大文件读入内存,大大减少了内存占用,降低内存溢出风险。
- 预编译正则表达式:使用
re.compile
预编译正则表达式,在多次匹配时可以提高匹配效率,因为预编译后的模式对象在内部进行了优化,减少每次匹配时的编译开销。
- 生成器使用:使用
yield
创建生成器,这样在处理数据时是按需生成,而不是一次性生成所有结果存储在内存中,进一步优化内存使用。