python分割文件的常用方法
本文大家整理了一些比较好用的关于python分割文件的方法,方法非常的简单实用。分享给大家供大家参考。具体如下:
例子1指定分割文件大小
配置文件config.ini:
[global] #原文件存放目录 dir1=F:\work\python\3595\pyserver\test #新文件存放目录 dir2=F:\work\python\3595\pyserver\test1
python代码如下:
#!/usr/bin/python
#-*-coding:utf-8-*-
importos,sys,ConfigParser
classfile_openate(object):
def__init__(self):
#初如化读取数据库配置
dir_config=ConfigParser.ConfigParser()
file_config=open('config.ini',"rb")
dir_config.readfp(file_config)
self.dir1=str(dir_config.get("global","dir1"))
self.dir1=unicode(self.dir1,'utf8')
self.dir2=str(dir_config.get("global","dir2"))
self.dir2=unicode(self.dir2,'utf8')
file_config.close()
#printself.dir2
#self.dir1="F:\\work\\python\\3595\\pyserver\\test"
deffile_list(self):
input_name_han="软件有不确认性,前期使用最好先备份,以免发生数据丢失,确认备份后,请输入要分割的字节大小,按b来计算".decode('utf-8')
printinput_name_han
while1:
input_name=raw_input("number:")
ifinput_name.isdigit():
input_name=int(input_name)
os.chdir(self.dir1)
forfilenameinos.listdir(self.dir1):
os.chdir(self.dir1)
#printfilename
name,ext=os.path.splitext(filename)
file_size=int(os.path.getsize(filename))
f=open(filename,'r')
chu_nmuber=0
whilefile_size>=1:
#printfile_size
chu_nmuber=chu_nmuber+1
iffile_size>=input_name:
file_size=file_size-input_name
a=f.read(input_name)
os.chdir(self.dir2)
filename1=name+'-'+str(chu_nmuber)+ext
new_f=open(filename1,'a')
new_f.write(a)
new_f.close()
#printfile_size
else:
a=f.read()
os.chdir(self.dir2)
filename1=name+'-'+str(chu_nmuber)+ext
new_f=open(filename1,'a')
new_f.write(a)
new_f.close()
break
print"分割成功".decode('utf-8')+filename
f.close()
else:
print"请输入正确的数字,请重新输入".decode('utf-8')
file_name=file_openate()
file_name.file_list()
例子2,按行分割文件大小
#!/usr/bin/envpython
#--*--coding:utf-8--*--
importos
classSplitFiles():
"""按行分割文件"""
def__init__(self,file_name,line_count=200):
"""初始化要分割的源文件名和分割后的文件行数"""
self.file_name=file_name
self.line_count=line_count
defsplit_file(self):
ifself.file_nameandos.path.exists(self.file_name):
try:
withopen(self.file_name)asf:#使用with读文件
temp_count=0
temp_content=[]
part_num=1
forlineinf:
iftemp_count<self.line_count:
temp_count+=1
else:
self.write_file(part_num,temp_content)
part_num+=1
temp_count=1
temp_content=[]
temp_content.append(line)
else:#正常结束循环后将剩余的内容写入新文件中
self.write_file(part_num,temp_content)
exceptIOErroraserr:
print(err)
else:
print("%sisnotavalidatefile"%self.file_name)
defget_part_file_name(self,part_num):
""""获取分割后的文件名称:在源文件相同目录下建立临时文件夹temp_part_file,然后将分割后的文件放到该路径下"""
temp_path=os.path.dirname(self.file_name)#获取文件的路径(不含文件名)
part_file_name=temp_path+"temp_part_file"
ifnotos.path.exists(temp_path):#如果临时目录不存在则创建
os.makedirs(temp_path)
part_file_name+=os.sep+"temp_file_"+str(part_num)+".part"
returnpart_file_name
defwrite_file(self,part_num,*line_content):
"""将按行分割后的内容写入相应的分割文件中"""
part_file_name=self.get_part_file_name(part_num)
print(line_content)
try:
withopen(part_file_name,"w")aspart_file:
part_file.writelines(line_content[0])
exceptIOErroraserr:
print(err)
if__name__=="__main__":
sf=SplitFiles(r"F:\multiple_thread_read_file.txt")
sf.split_file()
上面只是进行了分割了,如果我们又要合并怎么办呢?下面这个例子可以实现分割与合并哦,大家一起看看。
例子3,分割文件与合并函数
#!/usr/bin/python
##########################################################################
#splitafileintoasetofparts;join.pyputsthembacktogether;
#thisisacustomizableversionofthestandardunixsplitcommand-line
#utility;becauseitiswritteninPython,italsoworksonWindowsand
#canbeeasilymodified;becauseitexportsafunction,itslogiccan
#alsobeimportedandreusedinotherapplications;
##########################################################################
importsys,os
kilobytes=1024
megabytes=kilobytes*1000
chunksize=int(1.4*megabytes) #default:roughlyafloppy
defsplit(fromfile,todir,chunksize=chunksize):
ifnotos.path.exists(todir): #callerhandleserrors
os.mkdir(todir) #makedir,read/writeparts
else:
forfnameinos.listdir(todir): #deleteanyexistingfiles
os.remove(os.path.join(todir,fname))
partnum=0
input=open(fromfile,'rb') #usebinarymodeonWindows
while1: #eof=emptystringfromread
chunk=input.read(chunksize) #getnextpart<=chunksize
ifnotchunk:break
partnum =partnum+1
filename=os.path.join(todir,('part%04d'%partnum))
fileobj =open(filename,'wb')
fileobj.write(chunk)
fileobj.close() #orsimplyopen().write()
input.close()
assertpartnum<=9999#joinsortfailsif5digits
returnpartnum
if__name__=='__main__':
iflen(sys.argv)==2andsys.argv[1]=='-help':
print'Use:split.py[file-to-splittarget-dir[chunksize]]'
else:
iflen(sys.argv)<3:
interactive=1
fromfile=raw_input('Filetobesplit?') #inputifclicked
todir =raw_input('Directorytostorepartfiles?')
else:
interactive=0
fromfile,todir=sys.argv[1:3] #argsincmdline
iflen(sys.argv)==4:chunksize=int(sys.argv[3])
absfrom,absto=map(os.path.abspath,[fromfile,todir])
print'Splitting',absfrom,'to',absto,'by',chunksize
try:
parts=split(fromfile,todir,chunksize)
except:
print'Errorduringsplit:'
printsys.exc_info()[0],sys.exc_info()[1]
else:
print'Splitfinished:',parts,'partsarein',absto
ifinteractive:raw_input('PressEnterkey')#pauseifclicked
join_file.py
#!/usr/bin/python
##########################################################################
#joinallpartfilesinadircreatedbysplit.py,torecreatefile.
#Thisisroughlylikea'catfromdir/*>tofile'commandonunix,butis
#moreportableandconfigurable,andexportsthejoinoperationasa
#reusablefunction. Reliesonsortorderoffilenames:mustbesame
#length. Couldextendsplit/jointopopupTkinterfileselectors.
##########################################################################
importos,sys
readsize=1024
defjoin(fromdir,tofile):
output=open(tofile,'wb')
parts =os.listdir(fromdir)
parts.sort()
forfilenameinparts:
filepath=os.path.join(fromdir,filename)
fileobj =open(filepath,'rb')
while1:
filebytes=fileobj.read(readsize)
ifnotfilebytes:break
output.write(filebytes)
fileobj.close()
output.close()
if__name__=='__main__':
iflen(sys.argv)==2andsys.argv[1]=='-help':
print'Use:join.py[from-dir-nameto-file-name]'
else:
iflen(sys.argv)!=3:
interactive=1
fromdir=raw_input('Directorycontainingpartfiles?')
tofile =raw_input('Nameoffiletoberecreated?')
else:
interactive=0
fromdir,tofile=sys.argv[1:]
absfrom,absto=map(os.path.abspath,[fromdir,tofile])
print'Joining',absfrom,'tomake',absto
try:
join(fromdir,tofile)
except:
print'Errorjoiningfiles:'
printsys.exc_info()[0],sys.exc_info()[1]
else:
print'Joincomplete:see',absto
ifinteractive:raw_input('PressEnterkey')#pauseifclicked
希望本文所述对大家的Python程序设计有所帮助。