merge.py 2.4 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788899091929394959697
  1. # -*- coding: utf-8 -*-
  2. import config
  3. import os
  4. import tools
  5. import logging
  6. import zipfile
  7. # 待合并的文件目录
  8. DATA_DIR = "E:\Download\长尾关键词\长尾关键词-什么\普通-p"
  9. def get_files(path):
  10. '''
  11. 读取文件夹下的文件列表
  12. '''
  13. file_list = []
  14. for file in os.listdir(path):
  15. file_list.append(os.path.join(path,file))
  16. return file_list
  17. def merge_file_content():
  18. """
  19. 合并文件下的所有文件中的内容(仅限关键词)
  20. Parameters
  21. ----------
  22. dir_path : string
  23. 待读取的文件夹
  24. dest_file : string
  25. 合并后输出的文件
  26. exclude_file : list
  27. 跳过压缩文件中的文件
  28. ----------
  29. """
  30. # 获取文件列表
  31. files = get_files(DATA_DIR)
  32. # 总文件数
  33. total_num = len(files)
  34. logging.info("待处理文件数:%d" % total_num)
  35. # 排重过滤
  36. repeat_set = set()
  37. # 关键词排重前总数
  38. total_count=0
  39. # 读取数据并进行排重
  40. for i, file in enumerate(files):
  41. zfile = zipfile.ZipFile(file)
  42. filenames = zfile.namelist()
  43. for filename in filenames:
  44. # 重新编码文件名为正确形式
  45. realname = filename.encode('cp437').decode('gbk')
  46. # 排除无效文件
  47. if realname in config.MERGE_EXCLUDE_FILES:
  48. continue
  49. logging.info("正在处理文件: %s" % realname)
  50. # 读取压缩文件中的文件
  51. with zfile.open(filename) as file_content:
  52. lines = file_content.readlines()
  53. # 跳过开头两行
  54. for line in lines[2:]:
  55. split = line.decode("gbk").split(",")
  56. # 只需要第一列的数据
  57. repeat_set.add(split[0])
  58. # 记录次数
  59. total_count = total_count + 1
  60. tools.tip(total_num, i)
  61. logging.info("正在保存合并结果,文件位置:%s,排重前数据量:%d,排重后数据量:%d" % (config.MERGE_FILE, total_count, len(repeat_set)))
  62. with open(config.MERGE_FILE, "w", encoding="utf-8") as f:
  63. for item in repeat_set:
  64. f.write(item)
  65. f.write("\n")
  66. if __name__ == '__main__':
  67. TITLE= "拓展词合并"
  68. # 日志初始化
  69. tools.init_log()
  70. tools.log_start_msg(TITLE)
  71. merge_file_content()
  72. tools.log_end_msg(TITLE)