Python读取命令行参数生成文件组合并计算内容并集的实现问题
完整实现方案
核心修改说明
- 非空组合生成:原代码遍历组合长度时从0开始,会生成空组合,改为从1开始遍历即可直接过滤空组合
- 逻辑整合:遍历生成的所有非空组合,按顺序生成序号,逐个读取组合对应文件的内容,求行去重并集后输出到对应文件
完整代码
import sys import itertools from itertools import combinations # 读取命令行参数 number = int(sys.argv[1]) a_list = sys.argv[2: number+2] # 生成所有非空组合 all_combinations = [] # 遍历组合长度,从1开始直接排除空组合 for r in range(1, len(a_list) + 1): combinations_object = itertools.combinations(a_list, r) all_combinations += list(combinations_object) # 遍历每个组合生成输出文件 for idx, combo in enumerate(all_combinations, start=1): # 初始化存储行的集合 line_set = set() # 读取组合内所有文件的内容,加入集合自动去重 for item in combo: file_name = f"{item}.txt" with open(file_name, 'r', encoding='utf-8') as fin: line_set.update(fin.readlines()) # 输出到对应序号的文件 output_file = f"outputfile_{idx}.txt" with open(output_file, 'w', encoding='utf-8') as fout: fout.write(''.join(line_set))
执行说明
示例执行命令:python3 myProgram.py 3 A B C
执行后会生成7个输出文件,与要求的顺序完全对应:
- outputfile_1.txt:对应组合A,内容为A.txt的内容
- outputfile_2.txt:对应组合B,内容为B.txt的内容
- outputfile_3.txt:对应组合C,内容为C.txt的内容
- outputfile_4.txt:对应组合AB,内容为A.txt和B.txt的行去重并集
- 以此类推直到outputfile_7.txt对应组合ABC的内容
可选优化
如果需要去掉每行末尾的换行符再进行去重,可以将读取文件的逻辑改为:line_set.update([line.rstrip('\n') for line in fin.readlines()])
输出的时候再统一加换行即可。
内容的提问来源于stack exchange,提问作者Dev
相关产品推荐
相关产品推荐

