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
相关产品推荐
相关产品推荐

