大檔案拆分與合併指令碼(Python3 8)

2021-10-25 10:34:17 字數 3362 閱讀 4271

更多常用方法封裝和指令碼彙總歡迎移步

下面直接貼**:

# !/usr/bin/env python

# -*- coding: utf-8 -*-

# @date : 2020/11/16 20:33

# @author : joy

# @version : python3.8

import os, re

defnormal_path

(*args)

:return os.path.normpath(os.path.join(

*args)

)class

transfer

:def

__init__

(self)

: self.desktop_path = normal_path(

"c:/users"

, os.getenv(

"username"),

"desktop"

) self.default_size_per =

1024

*1024*10

defsplit_file

(self, src_file:

str, output_dir="")

:"""

拆分檔案

:param src_file: 原始檔路徑

:param output_dir: 切分檔案輸出目錄

:return:

"""ifnot os.path.isfile(src_file)

:raise exception(

f"the given path:

is not file!")if

not output_dir:

output_dir = self.desktop_path

file_size = os.path.getsize(src_file)

print

(f"src file size:m")

count = file_size // self.default_size_per

mod = file_size % self.default_size_per

if mod >

0: count +=

1with

open

(file

=src_file, mode=

"rb"

)as fr:

# 切割原始檔至目標大小

for i in

range(0

, count)

: target_file = normal_path(output_dir,f"_

")with

open

(file

=target_file, mode=

"wb"

)as fw:

fw.write(fr.read(self.default_size_per)

)print

("sub file name:"

, target_file)

print

("split finished!"

)def

fit_file

(self, files_dir:

str, target_file_name:

str, output_dir="")

:"""合併檔案

:param files_dir: 切分檔案所在目錄

:param target_file_name: 合併檔名

:param output_dir: 合併檔案輸出目錄

:return:

"""ifnot

(os.path.exists(files_dir)

and os.path.isdir(files_dir)):

raise exception(

f"the given path:

does not exist or is not a folder!")if

not output_dir:

output_dir = self.desktop_path

target_file_path = normal_path(output_dir, target_file_name)

if os.path.exists(target_file_path)

:raise exception(

"the output folder already exists target file!"

) regex = re.

compile

(target_file_name +

"_\d+"

) split_files =

# 獲取目標檔案列表並根據編號排序

forfile

in os.listdir(files_dir):if

not re.match(regex,

file):

continue

index =

file

.rsplit(

"_",1)

[1] split_files.insert(

int(index)

, normal_path(files_dir,

file))

# 組裝檔案

with

open

(file

=target_file_path, mode=

"ab"

)as fw:

for sub_file in split_files:

with

open

(file

=sub_file, mode=

"rb"

)as fr:

fw.write(fr.read())

print(f"

fit finished!"

)if __name__ ==

'__main__'

:file

="hadoop權威指南_第四版_中文版.pdf"

transfer = transfer(

)# transfer.split_file("e:/天天向上/hadoop權威指南_第四版_中文版.pdf")

transfer.fit_file(

"c:/users/joy/desktop/"

,file

)

——————————————————————————————

更多常用工具指令碼、自動化指令碼、封裝方法積累,請移步:

拆分大檔案的指令碼

有時候需要把乙個大檔案拆分成幾個小檔案,由於生產系統上沒有split程式,因此自己寫了兩個指令碼來實現該功能。第乙個指令碼根據行數來拆分 bin bash filename my line split.sh usage my line split.sh 行數 bigfile 拆分的檔案以bigfil...

將大檔案拆分並重新合併

實現思路 將大檔案拆分 因為拆分的可以是任何檔案,所有這裡使用位元組流進行拆分 可以利用緩衝區來對檔案進行拆分,如每次讀取400mb的類容將其寫成乙個新的檔案 拆分的檔案需要順序標明,以便正確順序還原 首先定義方法,我這裡給兩個引數,分別是目標檔案的路徑與拆分後寫入的路徑。將大檔案拆分成最大400m...

大檔案拆分

fp e logtest u ex160314.log 原檔名稱 fname e logtest u ex160314 新檔名稱 fsize 1024 1024 1mb,定義每個新檔案的大小 num 1 新檔名後 1 sum 0 每個新檔案的當前大小 with open fp,rb as fo fo...