diff options
-rw-r--r-- | combox/file.py | 72 | ||||
-rw-r--r-- | combox/tests/test_file.py | 9 |
2 files changed, 46 insertions, 35 deletions
diff --git a/combox/file.py b/combox/file.py index bb27592..39454f8 100644 --- a/combox/file.py +++ b/combox/file.py @@ -20,52 +20,63 @@ from os import path from sys import exit -def split_file(filename, n): - """Split the file into `n' parts and return them as an array. +def split_data(data, n): + """Split data into `n' parts and return them as an array. - filename: Absolute pathname of the file. + data: Stream of bytes or string n: Number of parts the file has to be split. """ - file_ = None - try: - file_ = open(filename, 'rb') - except IOError: - print "ERROR: opening %s" % (filename) - exit(1) - - f_parts = [] + d_parts = [] # File size in bytes. - file_size = path.getsize(filename) - # No. of bytes for each file part. - part_size = file_size / n - # Take note of remaining bytes; this is non-zero when file_size is + data_size = len(data) + # No. of bytes for each data part. + part_size = data_size / n + # Take note of remaining bytes; this is non-zero when data_size is # not divisible by `n'. - rem_bytes = file_size % n + rem_bytes = data_size % n - i = 0 - while i < n: - f_parts.append(file_.read(part_size)) - i += 1 + start = 0 + end = part_size + while end <= data_size: + d_parts.append(data[start:end]) + start = end + end = end + part_size - # read the remaining bytes into the last file part. - f_parts[n-1] += file_.read(rem_bytes) + # read the remaining bytes into the last data part. + end += start + rem_bytes + d_parts[n-1] += data[start:end] - return f_parts + return d_parts -def glue_file(f_parts): - """Glue different parts of the file to one. +def glue_data(d_parts): + """Glue different parts of the data to one. - f_parts: Array containing different parts of the file. Each part + f_parts: Array containing different parts of the data. Each part is a sequence of bytes. """ - file_content = '' - for part in f_parts: - file_content += part + data = '' + for part in d_parts: + data += part + + return data - return file_content + +def read_file(filename): + """Read file and return it as a string. + + filename: Absolute pathname of the file. + """ + file_ = None + try: + file_ = open(filename, 'rb') + except IOError: + print "ERROR: opening %s" % (filename) + exit(1) + + return file_.read() def write_file(filename, filecontent): @@ -74,7 +85,6 @@ def write_file(filename, filecontent): filename: Absolute pathname of the file. filecontent: String/bytstream to write to filename. """ - file_ = None try: file_ = open(filename, 'wb') diff --git a/combox/tests/test_file.py b/combox/tests/test_file.py index 08d0d85..bfd1d9c 100644 --- a/combox/tests/test_file.py +++ b/combox/tests/test_file.py @@ -18,12 +18,13 @@ from os import path -from file import split_file, glue_file, write_file +from file import split_data, glue_data, write_file, read_file ### Test to split, glue and create a copy of the image file from the ### glued image file. f = path.abspath('tests/files/the-red-star.jpg') +f_content = read_file(f) +f_parts = split_data(f_content, 5) +f_content = glue_data(f_parts) f_copy = path.abspath('tests/files/the-red-star-copy.jpg') -f_parts = split_file(f, 3) -filecontent = glue_file(f_parts) -write_file(f_copy, filecontent) +write_file(f_copy, f_content) |