04文件分割器脚本

it2025-01-12  14

1 ''' 2 将文件分割成很多组分,join.py将它们合并回 3 ''' 4 5 import sys,os 6 7 kilobytes=1024 8 megabytes=kilobytes*1000 9 chunksize=int(1.4*megabytes) #默认设置,大约一个软盘的容量 10 11 def split(fromfile,todir,chunksize=chunksize): 12 if not os.path.exists(todir): 13 os.mkdir(todir) 14 else: 15 for fname in os.listdir(todir): 16 os.remove(os.path.join(todir,fname)) 17 partnum=0 18 file_open=open(fromfile, 'rb') #二进制模式:不解码,没有行尾 19 while True: 20 chunk=file_open.read(chunksize) #获取下一个组分文件 21 if not chunk:break 22 partnum+=1 23 filename=os.path.join(todir,('part%04d'%partnum)) 24 fileobj=open(filename,'wb') 25 fileobj.write(chunk) 26 fileobj.close() 27 file_open.close() 28 assert partnum<=9999 29 return partnum 30 31 if __name__ == '__main__': 32 if len(sys.argv)==2 and sys.argv[1]=='-help': 33 print('Use:split.py [file-to-split target-dir [chunksize]]') 34 else: 35 if len(sys.argv)<3: 36 interactive=True 37 fromfile=input('File to be split?') 38 todir=input('Directory to store part files?') 39 else: 40 interactive=False 41 fromfile,todir=sys.argv[1:3] 42 if len(sys.argv)==4:chunksize=int(sys.argv[3])#如果传入第3个参数,则令此参数为分割的大小 43 absfrom,absto=map(os.path.abspath,[fromfile,todir]) 44 print('Splitting',absfrom,'to',absto,'by','chunksize') 45 46 try: 47 parts=split(fromfile,todir,chunksize) 48 except: 49 print('Error during split:') 50 print(sys.exc_info()[0],sys.exc_info()[1]) 51 else: 52 print('Split finished:',parts,'parts are in ',absto) 53 if interactive:input('Press Enter key')

 

 

  通过检查命令行参数的数目来判断其使用模式。在命令行模式下,你在命令行中列出待分割的文件和输出目录,还可以选择性的利用第三个命令行参数重写默认的组分文件大小。

  在交互模式下,脚本通过input在控制台窗口询问文件名和输出目录,并在结束时暂停,等待键盘输入后退出。

 

  这段代码谨慎地在二进制(rb,wb)下打开输入及输出文件,因为它需要可移植地处理可执行文件和音频文件等,而不仅是处理文本。

 

  这个脚本还特意手动关闭文件。以前我们使用一行代码就足够了:open(partname,'wb').write(chunk)  这种简化的形式依赖于一个事实,即python在对象被回收时(即文件对象由于不再有引用而被垃圾回收时)自动关闭文件。在这行单行代码中,文件对象可能马上就被回收了,因为open的结果临时存在于一个表达式中,并从未被长时存在的名称引用过。

 

转载于:https://www.cnblogs.com/start20180703/p/10329069.html

相关资源:windows 大文本文件分割器
最新回复(0)