Python实现含指定子串的行筛选无输出,求代码修正
解决从file2筛选指定行写入file3的无输出问题
文件内容
- file1内容:
boy men women girl women men
- file2内容:
good babyboy good babygirl bad babyboy bad babygirl xyz abc
需求说明
从file2中筛选同时满足以下条件的行并写入file3:
- 包含file1每行的第一个单词(
boy或girl,可作为其他单词的子串) - 包含单词
good
预期file3内容:
good babyboy good babygirl
问题代码(运行后无输出)
def main(): input_file_1 = 'file1' input_file_2 = 'file2' output_file = 'file3' with open(input_file_1, 'r') as f: lines_1 = f.readlines() with open(input_file_2, 'r') as f: lines_2 = f.readlines() with open(output_file, 'w') as f: for line_1 in lines_1: words = line_1.split() for line_2 in lines_2: if words[0] in line_2: if 'good' in line_2: f.write(line_2)
问题原因与修复
核心问题
代码定义了main()函数但没有调用它,导致程序执行时根本没运行筛选逻辑,自然没有输出。
修复后的代码
只需在代码末尾添加main()调用即可:
def main(): input_file_1 = 'file1' input_file_2 = 'file2' output_file = 'file3' with open(input_file_1, 'r') as f: lines_1 = f.readlines() with open(input_file_2, 'r') as f: lines_2 = f.readlines() with open(output_file, 'w') as f: for line_1 in lines_1: words = line_1.split() for line_2 in lines_2: if words[0] in line_2 and 'good' in line_2: f.write(line_2) # 调用main函数 main()
优化建议(可选)
原代码嵌套循环效率较低,可先收集file1的关键词到集合,再遍历file2一次完成筛选,逻辑更清晰且高效:
def main(): input_file_1 = 'file1' input_file_2 = 'file2' output_file = 'file3' # 收集file1每行的第一个单词 keywords = set() with open(input_file_1, 'r') as f: for line in f: first_word = line.strip().split()[0] keywords.add(first_word) # 筛选file2的行并写入file3 with open(input_file_2, 'r') as f_in, open(output_file, 'w') as f_out: for line in f_in: has_keyword = any(key in line for key in keywords) if has_keyword and 'good' in line: f_out.write(line) main()
内容的提问来源于stack exchange,提问作者Vivek
相关产品推荐
相关产品推荐

