面试题答案
一键面试方案思路
- 内存管理:由于文件无法一次性读入内存,采用逐行读取的方式,这样每次只在内存中保留一行数据,避免内存溢出。
- 性能优化:使用
re.finditer
来查找符合正则表达式的字符串,re.finditer
在处理长字符串时性能较好。同时,编译正则表达式,这样在多次匹配时可以提高效率。 - 错误处理:在读取文件时,使用
try - except
块捕获可能的文件读取错误,如文件不存在、权限不足等。
代码实现
import re
def extract_strings(file_path):
pattern = re.compile(r'[@#$]\d{6,8}[a-z]{2,4}')
try:
with open(file_path, 'r', encoding='utf-8') as file:
for line in file:
for match in pattern.finditer(line):
yield match.group()
except FileNotFoundError:
print(f"文件 {file_path} 不存在。")
except PermissionError:
print(f"没有读取文件 {file_path} 的权限。")
# 使用示例
file_path = 'your_large_text_file.txt'
for match in extract_strings(file_path):
print(match)
在上述代码中:
re.compile(r'[@#$]\d{6,8}[a-z]{2,4}')
编译正则表达式,提高匹配效率。- 使用
with open
逐行读取文件,保证内存使用的合理性。 try - except
块捕获并处理文件读取过程中的常见错误。- 使用生成器(
yield
)返回匹配结果,避免一次性将所有结果存储在内存中。