Разделение большого файла на несколько частей с помощью Python

Есть задача, нужно разделить файл на несколько частей, а потом собрать его. Думал решить через преобразования любого файла в ТХТ и вытаскивать по несколько тысяч строк, но выглядит как костыль. Файлы размером от 1Мб до 15Гб. Отдельную Библиотеку писать на С# к сожалению не умею, пытаюсь выкрутиться тем что есть. Заранее спасибо!!!


import os
import shutil
def split_file():
    splitLen= 500
    outputBase = 'E:/codes/piligrim/rezka/data'
    fil='E:/codes/piligrim/qwe.jpeg'
    input = open(fil,'rb').read().split(b'\x11',maxsplit=-1)
    i=100
    for lines in range (0,len(input),splitLen):
        outputData = input[lines:lines+splitLen]
        output=open(outputBase+str(i)+'.txt','wb')
        print(outputData)
        if i==100:
            output.write(b'\x11'.join(outputData))
            output.close()
        else:
            output.write(b'\x11'+b'\x11'.join(outputData))
            output.close()
        i+=1
    print("операция разделение файла прошла успешна")
def merge_file():
    with open('E:/codes/piligrim/gote/qwe2.txt' , 'wb') as fdst:
        sourscepath = 'E:/codes/piligrim/rezka/'
        for subdir,dirs,files in os.walk(sourscepath):
            sorted(files)
            print(files)
            for file in files:
                filename = sourscepath+file
                with open(filename,'rb') as fsrc:
                    shutil.copyfileobj(fsrc,fdst,1024*1024*10)    
    print("операция слияния файла прошла успешно")

if __name__=="__main__":
    split_file()
    merge_file()

Ответы (1 шт):

Автор решения: Goshan

И так, у меня получилось) вот код который делает деление файла по ОПРЕДЕЛЕННОМУ БАЙТУ, я взял \x11 не знаю что он означает, но мне это не нужно главное программа работает. Внимание если пробуете с большими файлами то нужно увеличить количество строк в splitLen иначе получите тысячи файлов. В принципе если вам нужны эти тысячи файлов, то все нормально, но программа потратит больше времени на открытие каждого. напомню что нужно поменять расширение в готовом файле на исходное.

import shutil
def split_file():
    splitLen= 500
    outputBase = 'E:/codes/piligrim/rezka/data'
    fil='E:/codes/piligrim/qwe.jpeg'
    input = open(fil,'rb').read().split(b'\x11',maxsplit=-1)
    i=100
    for lines in range (0,len(input),splitLen):
        outputData = input[lines:lines+splitLen]
        output=open(outputBase+str(i)+'.txt','wb')
        if i==100:
            output.write(b'\x11'.join(outputData))
            output.close()
        else:
            output.write(b'\x11'+b'\x11'.join(outputData))
            output.close()
        i+=1
    print("операция разделение файла прошла успешна")
def merge_file():
    with open('E:/codes/piligrim/gote/qwe2.txt' , 'wb') as fdst:
        sourscepath = 'E:/codes/piligrim/rezka/'
        for subdir,dirs,files in os.walk(sourscepath):
            sorted(files)
            print(files)
            for file in files:
                filename = sourscepath+file
                with open(filename,'rb') as fsrc:
                    shutil.copyfileobj(fsrc,fdst,1024*1024*10)    
    print("операция слияния файла прошла успешно")

if __name__=="__main__":
    split_file()
    merge_file()
→ Ссылка