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

Python命令行参数处理及按条件过滤文件生成组合的实现问题

修正后的完整代码
import sys
import itertools


def union(files):
    lines = set()
    for file in files:
        with open(file, encoding='utf-8') as fin:
            lines.update(fin.readlines())
    return lines


def process_combinations(file_list):
    print("所有可用组合:\n")
    all_combinations = []
    for length in range(1, len(file_list) + 1):
        for subset in itertools.combinations(file_list, length):
            print(*subset, sep=',')
            all_combinations.append(subset)
    print("...............................")
    for comb in all_combinations:
        filenames = list(comb)
        output_name = f"{''.join(comb)}_output"
        print(f"正在将{filenames}的并集写入{output_name}")
        with open(output_name, 'w', encoding='utf-8') as fout:
            fout.writelines(union(filenames))


def main():
    number = int(sys.argv[1])
    input_files = sys.argv[2: 2 + number]
    stemfile = sys.argv[2 + number]

    with open(f"{stemfile}.names", 'r', encoding='utf-8') as f:
        has_target_line = '| Final Pseudo Deletion Count is 0.' in f.read()
    
    if has_target_line:
        process_combinations(input_files)
    else:
        print("检测到噪声数据\n")
        filtered_files = [f for f in input_files if f != 'D']
        process_combinations(filtered_files)


if __name__ == '__main__':
    main()
主要修正说明
  • 噪声场景逻辑修正:不再通过截断参数列表排除文件,改为直接过滤所有名为D的输入文件,无论D在参数列表的哪个位置都能正确排除,完全适配你提到的参数顺序不固定的场景
  • 语法笔误修复:修正了原代码中输出文件名拼接时误用三个双引号的错误,改为空字符串拼接组合名称,避免生成错误的文件名
  • 冗余代码优化:将组合生成、文件输出的重复逻辑抽为公共函数,代码更简洁易维护
  • 兼容性优化:新增文件编码指定,避免不同系统环境下读写文件出现乱码问题

内容的提问来源于stack exchange,提问作者Dev

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.25 01:24:04