更多常用方法封裝和指令碼彙總歡迎移步:
下面直接貼**:
# !/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...