当前位置:   article > 正文

Python 高效分割大文件 按行数拆分大文件_python文件读取分割

python文件读取分割
  1. def read_large_file(m_fr):
  2. """
  3. 生成器函数,按行读取大文件
  4. :param m_fr:
  5. :return: 每行的内容
  6. """
  7. while True:
  8. line = m_fr.readline()
  9. if not line:
  10. break
  11. yield line
  12. # 按行数拆分文件
  13. # 将子文件存放到以文件名命名的文件夹中
  14. def file_split_quick(m_filepath, m_num, m_dirpath, m_num_dict):
  15. """
  16. 按行分割大文件
  17. :param m_filepath: 文件路径
  18. :param m_num: 每个分割文件的行数
  19. :param m_dirpath: 子文件存储目录
  20. :param m_num_dict: 记录子文件行数的字典
  21. """
  22. m_pathlist = []
  23. if not os.path.exists(m_filepath):
  24. print('error: not exist: {}'.format(m_filepath))
  25. assert 0 == 1
  26. if not os.path.exists(m_dirpath):
  27. os.makedirs(m_dirpath)
  28. m_filename = os.path.basename(m_filepath)
  29. m_out = []
  30. m_cmd = "wc -l {}".format(m_filepath)
  31. execute_command(m_cmd, m_out)
  32. m_total_num = int(m_out[0].split(' ')[0])
  33. if m_total_num > m_num:
  34. m_count = 0
  35. with open(m_filepath, 'r', encoding='utf-8') as m_fr:
  36. while True:
  37. m_lines = list(islice(read_large_file(m_fr), m_num))
  38. if not m_lines:
  39. break
  40. m_count += 1
  41. m_subpath = os.path.join(m_dirpath, os.path.splitext(m_filename)[0] + '_' + str(m_count).zfill(3) + os.path.splitext(m_filename)[1])
  42. m_fw = open(m_subpath, 'w', encoding='utf-8')
  43. m_fw.writelines(m_lines)
  44. m_fw.close()
  45. m_pathlist.append(m_subpath)
  46. m_num_dict[m_subpath] = len(m_lines)
  47. print('done: {} {}'.format(m_num_dict[m_subpath], m_subpath))
  48. else:
  49. m_newpath = os.path.join(m_dirpath, m_filename)
  50. m_pathlist.append(m_newpath)
  51. m_num_dict[m_newpath] = m_total_num
  52. shutil.copyfile(m_filepath, m_newpath)
  53. return m_pathlist

ChatGPT真是个好东西!

linux命令拆分:

  1. # 命令:split 文件路径 分割出的文件前缀
  2. # 示例:
  3. split test.txt test_
  4. # 文件按行分割
  5. # -l 设置行数
  6. # -a 指定后缀长度(默认为2)
  7. # --numeric-suffixes=1 指定数字起始值(会影响分割效率)
  8. # --additional-suffix=.txt 指定分割出来的文件格式(会影响分割效率)
  9. split -l 10000 test.txt test_ -a 3 --numeric-suffixes=1 --additional-suffix=.txt
  10. # 查看文件前10行内容
  11. head -n 10 test_001.txt

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/从前慢现在也慢/article/detail/625871
推荐阅读
相关标签
  

闽ICP备14008679号