用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()
使用示例:
《 “用Python写的文件分割脚本” 》 有 2 条评论
以前还想用这个合并视频,后来发现这个只是简单的文件连接,远远不够,后来用ffmpeg爽了,O(∩_∩)O~
嗯,视频和普通的文本文件不同,有特定的格式要求,所以无法简单的拼接。ffmpeg之前还倒腾过,但没试过视频合并等高级功能~~有机会可以向你请教。