python文件分割合并算法_Python 分割文件以及合并文件

#!/usr/bin/python

##########################################################################

# split a file into a set of parts; join.py puts them back together;

# this is a customizable version of the standard unix split command-line

# utility; because it is written in Python, it also works on Windows and

# can be easily modified; because it exports a function, its logic can

# also be imported and reused in other applications;

##########################################################################

import sys, os

kilobytes = 1024

megabytes = kilobytes * 1000

chunksize = int(1.4 * megabytes) # default: roughly a floppy

def split(fromfile, todir, chunksize=chunksize):

if not os.path.exists(todir): # caller handles errors

os.mkdir(todir) # make dir, read/write parts

else:

for fname in os.listdir(todir): # delete any existing files

os.remove(os.path.join(todir, fname))

partnum = 0

input = open(fromfile, 'rb') # use binary mode on Windows

while 1: # eof=empty string from read

chunk = input.read(chunksize) # get next part <= chunksize

if not chunk: break

partnum = partnum+1

filename = os.path.join(todir, ('part%04d' % partnum))

fileobj = open(filename, 'wb')

fileobj.write(chunk)

fileobj.close() # or simply open().write()

input.close()

assert partnum <= 9999 # join sort fails if 5 digits

return partnum

if __name__ == '__main__':

if len(sys.argv) == 2 and sys.argv[1] == '-help':

print 'Use: split.py [file-to-split target-dir [chunksize]]'

else:

if len(sys.argv) < 3:

interactive = 1

fromfile = raw_input('File to be split? ') # input if clicked

todir = raw_input('Directory to store part files? ')

else:

interactive = 0

fromfile, todir = sys.argv[1:3] # args in cmdline

if len(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 'Error during split:'

print sys.exc_info()[0], sys.exc_info()[1]

else:

print 'Split finished:', parts, 'parts are in', absto

if interactive: raw_input('Press Enter key') # pause if clicked

join_file.py

#!/usr/bin/python

##########################################################################

# join all part files in a dir created by split.py, to recreate file.

# This is roughly like a 'cat fromdir/* > tofile' command on unix, but is

# more portable and configurable, and exports the join operation as a

# reusable function. Relies on sort order of file names: must be same

# length. Could extend split/join to popup Tkinter file selectors.

##########################################################################

import os, sys

readsize = 1024

def join(fromdir, tofile):

output = open(tofile, 'wb')

parts = os.listdir(fromdir)

parts.sort()

for filename in parts:

filepath = os.path.join(fromdir, filename)

fileobj = open(filepath, 'rb')

while 1:

filebytes = fileobj.read(readsize)

if not filebytes: break

output.write(filebytes)

fileobj.close()

output.close()

if __name__ == '__main__':

if len(sys.argv) == 2 and sys.argv[1] == '-help':

print 'Use: join.py [from-dir-name to-file-name]'

else:

if len(sys.argv) != 3:

interactive = 1

fromdir = raw_input('Directory containing part files? ')

tofile = raw_input('Name of file to be recreated? ')

else:

interactive = 0

fromdir, tofile = sys.argv[1:]

absfrom, absto = map(os.path.abspath, [fromdir, tofile])

print 'Joining', absfrom, 'to make', absto

try:

join(fromdir, tofile)

except:

print 'Error joining files:'

print sys.exc_info()[0], sys.exc_info()[1]

else:

print 'Join complete: see', absto

if interactive: raw_input('Press Enter key') # pause if clicked

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值