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程序设计有所帮助。