python实现大文件分割与合并
更新时间:2019年07月22日 10:22:15 作者:Byte猫
这篇文章主要为大家详细介绍了python实现大文件分割与合并,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
很多时候我们会面临大文件无法加载到内存,或者要传输大文件的问题。这时候就需要考虑将大文件分割为小文件进行处理了。
下面是一种用python分割与合并分件的实现。
import os
FILE_DIR = os.path.dirname(os.path.abspath(__file__))
#========================================================
# 文件操作
#========================================================
def get_filelist1(dir, postfix):
'''
按照后缀返回文件名列表
INPUT -> 目录地址, 文件后缀
OUTPUT -> 文件名列表
'''
return [os.path.join(dir, f) for f in os.listdir(dir) if f.endswith(postfix)]
def get_filelist2(dir, preffix):
'''
按照前缀返回文件名列表
INPUT -> 目录地址, 文件前缀
OUTPUT -> 文件名列表
'''
return [os.path.join(dir, f) for f in os.listdir(dir) if f.startswith(preffix)]
def get_file_postfix(filename):
'''
获取文件名后缀
INPUT -> 文件名
OUTPUT -> 文件后缀
'''
file = os.path.splitext(filename)
preffix, postfix = file
return postfix
def get_file_preffix(filename):
'''
获取文件名前缀
INPUT -> 文件名
OUTPUT -> 文件前缀
'''
file = os.path.splitext(filename)
preffix, postfix = file
return preffix
def file_chunkspilt(path, filename, chunksize):
'''
文件按照数据块大小分割为多个子文件
INPUT -> 文件目录, 文件名, 每个数据块大小
'''
if chunksize > 0:
filepath = path+'/'+filename
partnum = 0
inputfile = open(filepath, 'rb')
while True:
chunk = inputfile.read(chunksize)
if not chunk:
break
partnum += 1
newfilename = os.path.join(path, (filename+'_%04d' % partnum))
sub_file = open(newfilename, 'wb')
sub_file.write(chunk)
sub_file.close()
inputfile.close()
else:
print('chunksize must bigger than 0!')
def file_linespilt(path, filename, limit):
'''
文件按照行分割成多个子文件
INPUT -> 文件目录, 文件名, 行数
'''
if limit > 0:
preffix = get_file_preffix(filename)
postfix = get_file_postfix(filename)
file_count = 0
l_list = []
with open(path+'/'+filename, 'rb') as f:
for line in f:
l_list.append(line)
if len(l_list) < limit:
continue
subfile = preffix+"_"+str(file_count)+"."+postfix
with open(FILE_DIR+'/'+subfile, 'wb') as file:
for l in l_list[:-1]:
file.write(l)
file.write(l_list[-1].strip())
l_list=[]
file_count += 1
else:
print('limit must bigger than 0!')
def file_combine(path, filename):
'''
子文件合并
INPUT -> 文件目录, 文件名
'''
filepath = path+'/'+filename
partnum = 0
outputfile = open(filepath, 'wb')
subfile_list = get_filelist2(FILE_DIR, filename+'_')
for subfile in subfile_list:
temp = open(subfile, 'rb')
outputfile.write(temp.read())
temp.close()
outputfile.close()
以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持脚本之家。
相关文章
详解修改Anaconda中的Jupyter Notebook默认工作路径的三种方式
这篇文章主要介绍了详解修改Anaconda中的Jupyter Notebook默认工作路径的三种方式,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧2021-01-01
python 自动化将markdown文件转成html文件的方法
这篇文章主要介绍了python 自动化将markdown文件转成html文件的方法的相关资料,本文介绍的非常详细,具有参考借鉴价值,需要的朋友可以参考下2016-09-09
Numpy中np.vstack() 和 np.hstack() 的实现
本文主要介绍了Numpy中np.vstack()和np.hstack()的实现,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧2024-04-04
Python新手入门之单引号、双引号与三引号的差异与应用示例
在Python当中表达字符串既可以使用单引号,也可以使用双引号,那两者有什么区别吗?下面这篇文章主要给大家介绍了关于Python新手入门之单引号、双引号与三引号的差异与应用示例,需要的朋友可以参考下2024-03-03


最新评论