omi_yang
@omi_yang
я начинающий и еще мало чего понимаю

Каждый раз создавать новый файл при выполнении if?

Всем привет я начинающий программист, если вообще можно так сказать.
Мне нужно написать прогу которая бьет файл на чанки, после записывает каждый чанк в новый файл
readingFile = input("введите полный путь к файлу чтения: ") # file selection
recordFile = input("Введите полный путь к файлу записи: ") # recording file

print(readingFile, 'файл чтения')
print(recordFile, 'файл записи')

file1 = open(readingFile, "rb") # read only
file2 = open(recordFile, "wb") # record only

numberWhile = 0

while byte:    # byte=false at end of file
    print(byte)
    byte = file1.read(1)
    numberWhile += 1

if numberWhile < 15:
    f = open("каждый раз создавать файл с новым названием для каждого чанка", "r")
    f.write(byte)

# adding files for each byte

file1.close()
file2.close()

Как мне создавать новый файл, каждый раз после набора 15, возможно то что я написал даже прочитать сложно будет, простите и спасибо за помощь, и понимание
  • Вопрос задан
  • 167 просмотров
Решения вопроса 1
SoreMix
@SoreMix Куратор тега Python
yellow
Это в принципе не верный подход. while бесконечно ведь работает, до конца файла, так что никаких чанков не будет. Как и не будет никаких байт, вы их просто прочитали и забыли. При таком подходе, даже если заменить "r" на "wb" в последнем вашем условии, то вы получите только последний байт из исходного файла (хотя условие вряд ли сработает, файл на 15 байт это я не знаю)

Алгоритм простой

Определяем размер чанка, допустим это будет 10.000. Далее, открываем нужный файл в режиме rb, в бесконечном цикле пытаемся прочитать наш чанк (f.read(10000)). Если что-то прочиталось - открываем файл с чанком с индексом, (мы ведь хотим потом собрать начальный файл) в режиме wb, записываем туда наши байты. Если ничего не вернулось - break.

Ошибок в коде много, сама база выстроена неправильно. Так что проще удалить и написать заного. У вас как минимум выходгной файл почему-то один, какую роль играет file2? После прочтения с переменной byte ничего не происходит, в итоге файла даже не будет,

По поводу нового имени - просто добавляете к названию какой нибудь префикс или постфикс, или еще что нибудь, что вам нравится. Обычно это номер итерации цикла.

Если есть желаение учиться - нужно сделать все самому, алгоритм выше я написал, осталось только написать на его основе код. Учитывая легкость языка, то проблем быть не должно. Если не получилось, оставлю код как подсказку, но тогда и смысла мало.

код

chunk_size = 9000

with open(file, 'rb') as f:
    
    i = 0

    while True:
        
        data = f.read(chunk_size)
        
        if data:
            with open(f'chunk_{i}', 'wb') as f2:
                f2.write(data)
        else:
            break

        i += 1

Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

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

Войти через центр авторизации
Похожие вопросы
19 апр. 2024, в 05:01
999999 руб./за проект
19 апр. 2024, в 03:52
1000 руб./за проект
19 апр. 2024, в 03:01
1000 руб./за проект