hl

Форк
0
/
split.py 
111 строк · 3.1 Кб
1
import os
2
from shutil import rmtree
3
from sys import argv
4
from sys import exit as exit_
5

6

7
argc = len(argv)
8
filename = None
9
step = 4096
10
args = argv[1:]
11
argc -= 1
12
zstd_path = None
13

14

15
for i in range(argc):
16
    lowered = args[i].lower()
17
    is_last = i == argc - 1
18
    if lowered == '--help' or lowered == '-h':
19
        print('--help - Display information.')
20
        print('--step {int} - Set step')
21
        print('--filename {path} - Set file path')
22
        print('--zstd_path {path} - Set path to zstd and use it')
23
        exit_(0)
24
    elif lowered == '--step' or lowered == '-s':
25
        if is_last:
26
            print('Argument required!')
27
            exit_(1)
28
        else:
29
            step = int(args[i + 1])
30
    elif lowered == '--filename' or lowered == '-f':
31
        if is_last:
32
            print('Argument required!')
33
            exit_(1)
34
        else:
35
            filename = args[i + 1]
36
    elif lowered == '--zstd_path' or lowered == '-z':
37
        if os.name == 'posix':
38
            zstd_path = 'zstd'
39
            if os.system(zstd_path + ' --version'):
40
                while True:
41
                    input_result = input('Install ' + zstd_path + ' [Y/n]? ').lower().strip()
42
                    if input_result == 'n':
43
                        exit_(1)
44
                    elif input_result == 'y':
45
                        os.system('sudo apt-get install zstd')
46
                        if os.system(zstd_path + ' --version'):
47
                            print(zstd_path + ' installation failed!')
48
                            exit_(1)
49
                        break
50
        else:
51
            if is_last:
52
                print('Argument required!')
53
                exit_(1)
54
            else:
55
                zstd_path = args[i + 1]
56

57
if argc <= 1 or not filename:
58
    print('Use --help for more information')
59
    exit_(1)
60

61
if not os.access(filename, os.F_OK):
62
    print('Could not open file!')
63
    exit_(1)
64

65
ext = filename.split('.')[-1]
66
no_ext = filename[:-len(ext) - 1].replace('\\', '/').split('/')[-1]
67
    
68
out_dir = os.path.join(os.path.dirname(filename), no_ext + '_out')
69

70

71
if os.path.isdir(out_dir):
72
    if os.listdir(out_dir):
73
        while True:
74
            input_result = input('Out dir is not empty! Continue [Y/n]? ').lower().strip()
75
            if input_result == 'n':
76
                exit_(1)
77
            elif input_result == 'y':
78
                rmtree(out_dir)
79
                os.mkdir(out_dir)
80
                break
81
else:
82
    os.mkdir(out_dir)
83

84
opened = open(filename, 'rb')
85
readf = opened.read()
86
opened.close()
87
file_length = len(readf)
88

89
i = 0
90
j = 0
91

92
while i < file_length - step:
93
    file_path = os.path.join(out_dir, f'{no_ext}-{j}.{ext}')
94
    temp_file = open(file_path, 'wb')
95
    temp_file.write(readf[i:i + step])
96
    temp_file.close()
97
    if zstd_path:
98
        cmd = f'{zstd_path} --format=zstd -o "{file_path}.zst" {file_path}'
99
        os.system(cmd)
100
        os.remove(file_path)
101
    i += step
102
    j += 1
103

104

105
file_path = os.path.join(out_dir, f'{no_ext}-{j}.{ext}')
106
temp_file = open(file_path, 'wb')
107
temp_file.write(readf[i:file_length])
108
temp_file.close()
109
if zstd_path:
110
    os.system(f'{zstd_path} --format=zstd -o "{file_path}.zst" {file_path}')
111
    os.remove(file_path)

Использование cookies

Мы используем файлы cookie в соответствии с Политикой конфиденциальности и Политикой использования cookies.

Нажимая кнопку «Принимаю», Вы даете АО «СберТех» согласие на обработку Ваших персональных данных в целях совершенствования нашего веб-сайта и Сервиса GitVerse, а также повышения удобства их использования.

Запретить использование cookies Вы можете самостоятельно в настройках Вашего браузера.