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

Python实现含指定子串的行筛选无输出,求代码修正

解决从file2筛选指定行写入file3的无输出问题

文件内容

  • file1内容:
boy men women
girl women men
  • file2内容:
good babyboy
good babygirl
bad babyboy
bad babygirl
xyz
abc

需求说明

从file2中筛选同时满足以下条件的行并写入file3:

  1. 包含file1每行的第一个单词(boy或girl,可作为其他单词的子串)
  2. 包含单词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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.22 12:05:19