Advertisement
Guest User

Untitled

a guest
May 26th, 2019
73
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Python 10.19 KB | None | 0 0
  1. import os
  2. import random
  3. import math
  4. # Все переменные используемые мной, как счетчики увеличивающиеся инкрементированием имеют пометку "inc"
  5.  
  6.  
  7. class Hex:
  8.     hex_string = ''
  9.     row = -10
  10.  
  11.  
  12.     def string_creator(self, hex_byte, file_dir, inc):
  13.         size_info = Hex.file_size_info(file_dir)
  14.         if inc == size_info:
  15.             if len(Hex.hex_string) == 21:
  16.                 Hex.string_mod(hex_byte)
  17.             else:
  18.                 Hex.hex_string = Hex.hex_string + ' ' + hex_byte
  19.             hex_byte = '00'
  20.             while len(Hex.hex_string) != 50:
  21.                 if len(Hex.hex_string) == 21:
  22.                     Hex.string_mod(hex_byte)
  23.                 else:
  24.                     Hex.hex_string = Hex.hex_string + ' ' + hex_byte
  25.             hex_row = Hex.hex_string
  26.             Hex.matrix_creator(hex_row)
  27.             Hex.hex_string = ''
  28.         if len(Hex.hex_string) != 21 and len(Hex.hex_string) < 48 and len(Hex.hex_string) != 47:
  29.             Hex.hex_string = Hex.hex_string + ' ' + hex_byte
  30.         elif len(Hex.hex_string) == 21:
  31.             Hex.string_mod(hex_byte)
  32.         elif len(Hex.hex_string) == 47:
  33.             Hex.hex_string = Hex.hex_string + ' ' + hex_byte
  34.             hex_row = Hex.hex_string  # Я знаю, что сейчас ты словил(а) фейспалм, но я не мог не сделать этого.
  35.             Hex.matrix_creator(hex_row)
  36.             Hex.hex_string = ''
  37.  
  38.  
  39.     # Получение байтовой длинны файла
  40.     def file_size_info(file_dir):
  41.         size_file = os.stat(file_dir)
  42.         return size_file.st_size
  43.  
  44.  
  45.     # Счетчик строк
  46.     @staticmethod
  47.     def row_creator():
  48.         Hex.row = Hex.row + 10
  49.         return f'{Hex.row:08d}'
  50.  
  51.  
  52.     # Постановка | в середине строки
  53.     @staticmethod
  54.     def string_mod(hex_byte):
  55.         Hex.hex_string = Hex.hex_string + ' ' + hex_byte + ' ' + '|'
  56.  
  57.  
  58.     # Ascii код строки
  59.     @staticmethod
  60.     def ascii_creator(hex_row):
  61.         ascii_nosplit = ''.join(c for c in hex_row if c not in ('|', ' '))
  62.         ascii_no0a = ascii_nosplit.replace('0a', '2e')
  63.         ascii_no0d = ascii_no0a.replace('0d', '2e')
  64.         ascii_row = bytes.fromhex(ascii_no0d).decode('windows-1251')
  65.         return ascii_row
  66.  
  67.  
  68.     # Собиратель строк
  69.     @staticmethod
  70.     def matrix_creator(hex_row):
  71.         row_iter_int = Hex.row_creator()
  72.         row_iter_str = str(row_iter_int)
  73.         ascii_row = Hex.ascii_creator(hex_row)
  74.         input_row = row_iter_str + '|' + hex_row + ' |' + ascii_row
  75.         print(input_row)
  76.  
  77.  
  78. # Вызов шалупони, начало редактора
  79. def main():
  80.     print(r'__________________________________________________')
  81.     print(r'====================HEX.Editor====================')
  82.     print(r'__________________________________________________')
  83.     print('\n---------------enter file directory--------------- \n')
  84.     file_dir = input('')
  85.     shelypon()
  86.     print('00000000| 00 01 02 03 04 05 06 07 | 08 09 0a 0b 0c 0d 0e 0f | ASCII_COD      ')
  87.     file_work(file_dir)
  88.     print('\nДля редактирования байта введите его положение и то на, что хотите его изменить.'
  89.           'Шаблон: row, column, byte'
  90.           '\nПример:\n'
  91.           '00000000| 00 01 02 03 04 05 06 07 | 08 09 0a 0b 0c 0d 0e 0f | ASCII_COD      \n'
  92.           '00001210|                                 37\n'
  93.           '00001210, 0a, 2e')
  94.     print('\n----but first enter the free directory to work----\n')
  95.     intermediate_dir = input('')
  96.     print('\nНачинайте редактирование байтов\n')
  97.     edit_user = input('')
  98.     separation(edit_user, file_dir, intermediate_dir)
  99.  
  100.  
  101. # Создание файла для редактора, вызов записи в этот файл
  102. def writing_blocks_file(inc_change, inc_file_sharing, file_extract_blocks, mix, change_to, file_dir, mb_block,
  103.                         intermediate_dir):
  104.     number_blocks = 1
  105.     file_block = open(intermediate_dir, "wb")
  106.     block_writer(number_blocks, inc_change, inc_file_sharing, file_extract_blocks, file_block, mb_block)
  107.     write_to_file(file_extract_blocks, mix, inc_change, change_to, file_block, number_blocks, inc_file_sharing,
  108.                     mb_block)
  109.     file_extract_blocks.close()  # такое закрытие необходимо, для открытия в другом редиме
  110.     file_block.close()
  111.     file_reload(file_dir, inc_file_sharing, mb_block, intermediate_dir)
  112.  
  113.  
  114. # Перезапись файла
  115. def file_reload(file_dir, inc_file_sharing, mb_block, intermediate_dir):
  116.     file_copying = open(intermediate_dir, "rb")
  117.     file_insertions = open(file_dir, 'wb')
  118.     file_copying.seek(0, 0)
  119.     file_insertions.seek(0, 0)
  120.     inc_rewriting = 0
  121.     while inc_rewriting != inc_file_sharing:
  122.         many_byte = file_copying.read(mb_block)
  123.         file_insertions.write(many_byte)
  124.         inc_rewriting += 1
  125.     file_copying.close()
  126.     file_insertions.close()
  127.  
  128.  
  129. # Запись блоков которые не изменны
  130. def block_writer(number_blocks, inc_change, inc_file_sharing, file_extract_blocks, file_block, mb_block):
  131.     while number_blocks != inc_change or number_blocks != inc_file_sharing:
  132.         regenerated_block = file_extract_blocks.read(mb_block)
  133.         file_block.write(regenerated_block)
  134.         number_blocks += 1
  135.  
  136.  
  137. # Запись блока с изменением
  138. def write_to_file(file_extract_blocks, mix, inc_change, change_to, file_block, number_blocks, inc_file_sharing,
  139.                   mb_block):
  140.     change_in_block = mix - (mb_block * (inc_change - 1))
  141.     many_byte = file_extract_blocks.read(change_in_block - 1)
  142.     file_block.write(many_byte)
  143.     one_byte = file_extract_blocks.read(1)
  144.     one_byte = bytes.fromhex(change_to)
  145.     file_block.write(one_byte)
  146.     many_byte = file_extract_blocks.read(mb_block - change_in_block)
  147.     file_block.write(many_byte)
  148.     if number_blocks != inc_file_sharing:
  149.         number_blocks += 1
  150.         block_writer(number_blocks, inc_change, inc_file_sharing, file_extract_blocks, file_block, mb_block)
  151.  
  152.  
  153. # Запись в файл
  154. def separation(edit_user, file_dir, intermediate_dir):
  155.     mb_block = 1024 * 1024
  156.     row_edit = edit_user[0:8]
  157.     column_edit = edit_user[10:12]
  158.     change_to = edit_user[14:16]
  159.     mix = mixing(column_edit, row_edit)
  160.     file_size = file_siz(file_dir)
  161.     inc_file_sharing = math.ceil(file_size / (mb_block - 1))
  162.     inc_change = math.ceil(mix / (mb_block - 1))
  163.     with open(file_dir, 'rb') as file_extract_blocks:
  164.         writing_blocks_file(inc_change, inc_file_sharing, file_extract_blocks, mix, change_to, file_dir, mb_block,
  165.                             intermediate_dir)
  166.     os.remove(intermediate_dir)
  167.  
  168.  
  169. # Получение смешения
  170. def mixing(column_edit, row_edit):
  171.     row_int = int(row_edit)
  172.     row_16 = (row_int * 16) / 10
  173.     column_int = int(column_edit, 16)
  174.     row_16 = int(row_16 + column_int) + 1
  175.     return row_16
  176.  
  177.  
  178. # Получение байтовой длинны файла
  179. def file_siz(file_dir):
  180.     size_file = os.stat(file_dir)
  181.     return size_file.st_size
  182.  
  183.  
  184. # Открытие файла, получение хекс-байт строк
  185. def file_work(file_dir):
  186.     with open(file_dir, 'rb') as file_showing:
  187.         # file_showing.lseek(file_showing, 0, 0)
  188.         # one_byte = os.read(file_1, 0)
  189.         size_info = file_siz(file_dir)
  190.         inc = 0
  191.         while True:
  192.             if inc == size_info:
  193.                 break
  194.             sixteen_byte = file_showing.read(1)
  195.             hex_byte_sixteen = bytes.hex(sixteen_byte)
  196.             inc += 1
  197.             # string_creator(hex_byte, inc, size_info)  # умножить на 16 для кол ва байт
  198.             #hex_str = Hex()
  199.             Hex.string_creator(hex_byte, file_dir, inc)
  200.  
  201.  
  202.  
  203. # Шелупонь
  204. def shelypon():
  205.     damki = random.randint(1, 10)
  206.     if damki == 1:
  207.         print('Заходи, сбоку заходи!')
  208.     elif damki == 2:
  209.         print('Ай, мляяя, маслину поймал')
  210.     elif damki == 3:
  211.         print('Манаалиииииит!')
  212.     elif damki == 4:
  213.         print('Ты бы еще консервных банок насобирал...')
  214.     elif damki == 5:
  215.         print('Посадил как-то дед репку. В Зоне… И выросла репка большая-пребольшая.'
  216.               'Такая большая… что еслиб не ствол — хрен бы дед от нее отбился!')
  217.     elif damki == 6:
  218.         print('Молодые сталкеры не умеют собирать артефакты… Зато ОПЫТНЫЕ — умеют НЕ собирать.')
  219.     elif damki == 7:
  220.         print('В небе как-то столкнулись НАШ и американский спутники.'
  221.               'Американцы врут, ЧТО их спутник был нешпионским. А наши врут, что наш спутник был … неуправляемым.')
  222.     elif damki == 8:
  223.         print('Как то раз ПЛОТЬ увидела неподалеку долговца. И хрюкает, значит, своим поросятам:'
  224.               '— Ну-ка детки (доброжелательно). Быстро закройте уши… Сейчас он по нам промажет и ТАК материться будет!')
  225.     elif damki == 9:
  226.         print('Бродит, говорят, по зоне ходячая аномалия — непьющий и некурящий сталкер.'
  227.               'Приманивается на запах молочка или манной каши. Способ дистанционного обнаружения —'
  228.               ' на расстоянии 200 метров от объекта… счетчик Гейгера зашкаливает.')
  229.     elif damki == 10:
  230.         print('Ты валыной не свети')
  231.  
  232.  
  233. if __name__ == '__main__':
  234.     main()
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement