MicroProger
@MicroProger
Работает - не трогай

Как разделить файл на две части по символам?

Здравствуйте. У меня есть файл, в котором около 7 тысяч символов. Мне нужно разделить его на две части и записать в два файла. Возможно, кто-то скажет, что такие вопросы уже есть. Но не все так просто. Дело в том, что этот файл состоит из одной строки. Это код base64.
Этот код делит файл по строкам:
def sequence_cut(path_file_in, path_dir_out, count_lines=1):
    '''Функция sequence_cut разрезает файл с расширением .txt на файлы с расширением .txt c заданным количеством строк.
            Параметры: path_file_in : str
                    Абсолютный или относительный путь до файла с расширением .txt, который нужно разрезать.
                  path_dir_out : str
                    Абсолютный или относительный путь до папки, в которую будут помещаться нарезанные файлы.
                  count_lines :  int, default 500000
                    Количество строк, на которые разрезается исходный файл.
       Возвращаемое значение: None   
    '''
    
    def delete_line_feed_end(line):        
        if line[-1:] == '\n':
            return line[:-1]
        return line
    
    path_dir_out += '\\' + path_file_in.split('\\')[-1][:-4]
    stop_iteration = count_lines - 2
    try:
        file_number = 1
        with open(path_file_in) as file_read:
            line = file_read.readline()            
            while line:
                new_file_name = path_dir_out + '_' + str(file_number) + '.txt'
                with open(new_file_name, 'w') as file_write:
                    file_write.write(delete_line_feed_end(line))                                       
                    line = file_read.readline()
                    i = 0                
                    while line and (i < stop_iteration):
                        file_write.write('\n')
                        file_write.write(line[:-1])
                        line = file_read.readline()
                        i += 1
                    if line:                        
                        file_write.write('\n')
                        file_write.write(delete_line_feed_end(line))             
                file_number += 1
                line = file_read.readline()
    except Exception as err:
        print('Ошибка: ', err)

Можно ли написать что-то подобное? Важно, чтобы код делил исключительно по символам, например на 3500 и 3500 символов.
  • Вопрос задан
  • 128 просмотров
Решения вопроса 1
phaggi
@phaggi Куратор тега Python
лужу, паяю, ЭВМы починяю
Используйте срез. Для такого небольшого объема, как 7К символов всё это можно делать прямо в памяти.
  1. Загружаете файл в память как строку.
  2. Сохраняете в новый файл срез до половины (длина строки // 2)
  3. Сохраняете в следующий файл срез от половины.

Всё.
Ответ написан
Пригласить эксперта
Ответы на вопрос 1
mayton2019
@mayton2019
Bigdata Engineer
Это не будет работать. Base64 использует специальные символы padding в конце файла чтоб указать
какой из символов терминирует поток байтов.

Поэтому если ты просто текст base64 тупо разрежешь на 2 части то эти две части станут невалидные
с точки зрения кодировки base64. Надо примерно так

input string => base64decoder => bytearray => split_3500 => encode_each_array_base64 => save_to_files


вот на таком выдуманном всевдо-коде.
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы