# -*- coding: utf-8 -*- import os import zipfile # 带合并的文件目录 DATA_DIR = "E:\Download\长尾关键词\普通-p" # 合并后输出文件 MERGE_OUTPUT_FILE = "./data/合并结果.txt" # 排除合并的文件 EXCLUDE_FILES = ['打开乱码如何处理?.txt'] def get_files(path): ''' 读取文件夹下的文件名称 ''' file_list = [] for file in os.listdir(path): file_list.append(os.path.join(path,file)) return file_list def merge_file_content(): """ 合并文件下的所有文件中的内容(仅限关键词) Parameters ---------- dir_path : string 待读取的文件夹 dest_file : string 合并后输出的文件 exclude_file : list 跳过压缩文件中的文件 ---------- """ print("----------- 开始 -----------") # 获取文件列表 files = get_files(DATA_DIR) total_num = len(files) print("读取文件列表,待处理文件数:%d" % total_num) with open(MERGE_OUTPUT_FILE, "w", encoding="utf-8") as f: for i, file in enumerate(files): zfile = zipfile.ZipFile(file) filenames = zfile.namelist() for filename in filenames: # 重新编码文件名为正确形式 realname = filename.encode('cp437').decode('gbk') # 排除无效文件 if realname in EXCLUDE_FILES: continue print("正在处理文件: %s, 当前进度:%d / %d" % (realname, i, total_num)) # 读取压缩文件中的文件 with zfile.open(filename) as file_content: lines = file_content.readlines() # 跳过开头两行 for line in lines[2:]: split = line.decode("gbk").split(",") # 只需要第一列的数据 f.write(split[0]) f.write("\n") print("----------- 结束 -----------") if __name__ == '__main__': merge_file_content()