-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathExtract.py
More file actions
76 lines (64 loc) · 2.37 KB
/
Extract.py
File metadata and controls
76 lines (64 loc) · 2.37 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
import os
from tkinter import filedialog
import tkinter
def read_meta_data(file):
metaFile = open(file,"r")
first_lline = metaFile.readline().split("<")
partCount = int(first_lline[0])
normal_size = int(first_lline[1])
final_size = int(first_lline[2])
filesInfo = [info for info in metaFile]
fileNames = [name.split("<")[0] for name in filesInfo]
fileSizes = [int(name.split("<")[1]) for name in filesInfo]
return (partCount ,normal_size ,final_size ,fileNames ,fileSizes)
# get meta files
root = tkinter.Tk()
root.withdraw()
meta_file = filedialog.askopenfilename()
meta_file = meta_file.replace("\\","/") ;
root.destroy()
#get part count ,files info
part_count,normal_size ,final_size ,files_names,file_sizes = read_meta_data(meta_file)
path = "/".join(meta_file.split("/")[0:-1])
#output path
output_path = path + "/Extraced Files"
try:
os.mkdir(output_path)
except:
pass
def change_to_next_extract_file():
global extract_file_no
global extract_file_size
global extract_file
if extract_file_no+1 < len(files_names):
extract_file_no += 1
extract_file_size = file_sizes[extract_file_no]
extract_file = open(output_path+"/"+files_names[extract_file_no],"wb")
extract_file_no = 0
extract_file_size = file_sizes[extract_file_no]
extract_file = open(output_path+"/"+files_names[extract_file_no],"wb")
extracted_size = 0
for part_no in range(1,part_count+1):
part_file = "{0}/part-{1}.part".format(path ,part_no)
part_file = open(part_file,"rb")
for content in part_file:
while content:
if extracted_size + len(content) <= extract_file_size :
extract_file.write(content)
extracted_size += len(content)
if extracted_size == extract_file_size :
extracted_size = 0
extract_file.close()
change_to_next_extract_file()
content = ""
else:
content_left = content[extract_file_size-extracted_size:]
content = content[0:extract_file_size-extracted_size]
extract_file.write(content)
extract_file.close()
content = content_left
extracted_size = 0
change_to_next_extract_file()
part_file.close()
if not extract_file.closed:
extract_file.close()