#! /usr/bin/python2
import os, sys
import argparse
import re
exit = sys.exit
size_pat = re.compile(r"^\d+[KMG]?$")
KBYTE = 1024
MBYTE = KBYTE * KBYTE
GBYTE = KBYTE * MBYTE
buf_size = 32768
def parse_args():
parser = argparse.ArgumentParser()
parser.add_argument("file", nargs=1, help="path to file name")
parser.add_argument("-s", "--size", nargs=1, required=True, help="file is truncated to size")
return parser.parse_args()
def truncate_to_size(fpath, truncated_size):
with open(fpath, "ab") as F:
return F.truncate(truncated_size)
def file_exists(fpath):
return os.path.exists(fpath)
def get_file_size(fpath):
return os.path.getsize(fpath)
def str_to_number(str_size):
if str_size[-1].isdigit():
return int(str_size)
num, unit = int(str_size[:-1]), str_size[-1:]
if unit == 'K':
num *= KBYTE
elif unit == 'M':
num *= MBYTE
elif unit == 'G':
num *= GBYTE
return num
def copy_segment_to_file(in_fpath, start, end, out_fpath):
if start >= end:
return
outfile = open(out_fpath, "wb")
infile = open(in_fpath, "rb")
infile.seek(start, 0)
data = ''
while start < end:
data = infile.read(buf_size)
if data == '':
break
start += len(data)
outfile.write(data)
infile.close()
outfile.close()
if __name__ == '__main__':
args = parse_args()
fpath = args.file[0]
fstr_size = args.size[0]
if not size_pat.search(fstr_size):
print("ERROR: invalid size")
exit(1)
if not file_exists(fpath):
print("ERROR: file doesn't exist")
exit(1)
fsize = get_file_size(fpath)
trunc_size = str_to_number(fstr_size)
# print "fsize", fsize
# print "fsize", trunc_size
if trunc_size > fsize:
print("WARN: truncated size must be less than or equal to file size.")
exit(1)
copy_segment_to_file(fpath, trunc_size, fsize, fpath+"_part2")
truncate_to_size(fpath, trunc_size)
Diff to Previous Revision
--- revision 1 2015-02-11 19:52:45
+++ revision 2 2015-02-11 20:08:35
@@ -68,8 +68,8 @@
exit(1)
fsize = get_file_size(fpath)
trunc_size = str_to_number(fstr_size)
- print "fsize", fsize
- print "fsize", trunc_size
+# print "fsize", fsize
+# print "fsize", trunc_size
if trunc_size > fsize:
print("WARN: truncated size must be less than or equal to file size.")
exit(1)