zoukankan      html  css  js  c++  java
  • 04文件分割器脚本

     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的结果临时存在于一个表达式中,并从未被长时存在的名称引用过。

  • 相关阅读:
    Nginx错误日志配置信息详解
    CentOS 7 开放防火墙端口
    Windows Server 2008 R2常规安全设置及基本安全策略
    Whitewidow:SQL 漏洞自动扫描工具
    Windows Server 2008 架设 Web 服务器教程(图文详解)
    如何修改windows系统远程桌面默认端口
    Nginx的访问日志配置信息详解
    重构手法之在对象之间搬移特性【2】
    重构手法之在对象之间搬移特性【1】
    重构手法之重新组织函数【5】
  • 原文地址:https://www.cnblogs.com/start20180703/p/10329069.html
Copyright © 2011-2022 走看看