当前位置:   article > 正文

Git 突破 文件尺寸限制

Git 突破 文件尺寸限制

前言

Git本地存储里右超过50MB,却又确实需要上传的时候,就需要用到了不是

解决

本代码就是把大文件进行拆解成小文件,然后上传。

等到拉取下来的时候,可以直接再进行合并,合并成原文件

代码如下,仅供参考:

  1. '''
  2. -*- coding: utf-8 -*-
  3. @File : 文件分割与合并.py
  4. @Author: Shanmh
  5. @Time : 2024/02/26 下午2:37
  6. @Function: 突破git上传限制,把大文件分割成小文件再上传
  7. '''
  8. import os
  9. import shutil
  10. from natsort import natsorted
  11. import os
  12. def get_file_size(path):
  13. return os.path.getsize(path)/(1024*1024)
  14. def list_files_and_sizes(directory,max_size):
  15. big_list=[]
  16. for root, dirs, files in os.walk(directory):
  17. for file in files:
  18. file_path = os.path.join(root, file)
  19. file_size = get_file_size(file_path)
  20. if file_size>=max_size:
  21. print(f"{file_path}: {file_size:.2f} MB")
  22. big_list.append(file_path)
  23. return big_list
  24. def list_parts(directory):
  25. print("Find all parts , willing combine the parts:")
  26. parts_list = []
  27. for root, dirs, files in os.walk(directory):
  28. for dir in dirs:
  29. dir_path = os.path.join(root, dir)
  30. if dir_path.endswith(".parts"):
  31. parts_list.append(dir_path)
  32. print(parts_list)
  33. return parts_list
  34. def split_file(input_file, chunk_size):
  35. # 读取输入文件的内容
  36. os.makedirs(f"{input_file}.parts")
  37. with open(input_file, 'rb') as f:
  38. data = f.read()
  39. # 计算分割的文件数量
  40. num_chunks = len(data) // chunk_size
  41. if len(data) % chunk_size != 0:
  42. num_chunks += 1
  43. # 分割文件并保存为多个分块文件
  44. chunks = [data[i * chunk_size:(i + 1) * chunk_size] for i in range(num_chunks)]
  45. for i, chunk in enumerate(chunks):
  46. output_file = f'{input_file}.parts/tmp.part{str(i+1).zfill(4)}'
  47. with open(output_file, 'wb') as f:
  48. f.write(chunk)
  49. print(f'Split file: {output_file}')
  50. os.remove(input_file)
  51. return num_chunks
  52. def merge_files(output_file):
  53. # 合并分块文件并保存为输出文件
  54. with open(output_file.split(".parts")[0], 'wb') as f:
  55. for file in natsorted(os.listdir(output_file)):
  56. input_file = f'{output_file}/{file}'
  57. with open(input_file, 'rb') as chunk_file:
  58. f.write(chunk_file.read())
  59. os.remove(input_file)
  60. shutil.rmtree(output_file)
  61. print(f'Merged file: {output_file}')
  62. if __name__ == '__main__':
  63. method=1 #如果设置为 1 进行分割大文件, 2 则是进行合并
  64. currect_path=os.getcwd() #默认当前目录,可自行更改
  65. max_size=50 #MB 大于等于 50 MB 文件
  66. split_size=40 * 1024 * 1024 # 分割大小为40MB
  67. if method==1:
  68. files_list=list_files_and_sizes(currect_path,max_size)
  69. for fi in files_list:
  70. split_file(fi, split_size)
  71. elif method==2:
  72. parts_list=list_parts(currect_path)
  73. for fi in parts_list:
  74. merge_files(fi)

注意:此代码中有删除命令,请确保本程序正常运行后,在运行

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

闽ICP备14008679号