用Python写的文件分割脚本


用Python写的大文件分割脚本:
#!/usr/bin/env python
#-*- coding: UTF-8 -*-

import sys
from os.path import exists
fileCount = 0

def splitFile(fileName, partSize=1):
	# 1024 * 1024 = 1048576
	length = partSize * 1048576
	f1 = open(fileName, "rb")
	while True:
		content = f1.read(length)
		if content == "":
			break
		newFile = distFile(fileName)
		f2 = open(newFile, "wb")
		f2.write(content)
		f2.close()
	f1.close()
	print 'split file complete!'

def distFile(sourceFile):	#这里存在的问题是无法分割没有后缀名的文件,如:FileA
	global fileCount
	fileCount = fileCount + 1
	extPos = sourceFile.rfind('.')	#str.rfind()找到最后一个符合的字符的index
	if extPos > 0:
		return sourceFile + '.part' + str(fileCount)
	else:	# extPos == -1
		print 'File type? Can not split!'
		sys.exit(1)

def combine(filename):
	count = 0
	extPos = filename.find('.part')
	if extPos > 0:
		file = filename[:extPos]
		f1 = open(file, "wb")
		while True:
			count = count + 1
			partFile = file + '.part' + str(count)
			if not exists(partFile):
				break
			else:
				f2 = open(partFile, "rb")
				content = f2.read()
				f2.close()
				f1.write(content)
		f1.close()
		print 'combine file complete!'

	else:
		print 'File type? Can not combine!'

def usage():
	print "nusage is py_fileSplit.py s[c] filename or py_fileSplit.py s[c] filename size(M) n 's' - 'split', 'c' - 'combine"

if __name__ == "__main__":
	if len(sys.argv) !=3 and len(sys.argv) !=4:
		usage()
		sys.exit(1)
	if sys.argv[1] == 's':
		if len(sys.argv) == 3:
			splitFile(sys.argv[2])
		elif len(sys.argv) == 4 and int(sys.argv[3]) > 0:
			splitFile(sys.argv[2], int(sys.argv[3]))
		else:
			usage()
		sys.exit(1)

	elif sys.argv[1] =='c':
		if len(sys.argv) == 3:
			combine(sys.argv[2])
		else:
			usage()
	else:
		usage()
使用示例:

py_fileSplit__usage

,

《 “用Python写的文件分割脚本” 》 有 2 条评论

  1. 以前还想用这个合并视频,后来发现这个只是简单的文件连接,远远不够,后来用ffmpeg爽了,O(∩_∩)O~

    • 嗯,视频和普通的文本文件不同,有特定的格式要求,所以无法简单的拼接。ffmpeg之前还倒腾过,但没试过视频合并等高级功能~~有机会可以向你请教。

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注