У меня есть вопросы по поводу размера переменной в байтах - PullRequest
0 голосов
/ 10 ноября 2019

Python newbie здесь.

Я пытаюсь написать функцию, которая делит входной файл на 'n' порций, без усеченных строк. Таким образом, размер каждого разделенного файла не обязательно одинаков. Я просто пытаюсь разделить его так же, как могу.

способ, которым я подошел к этой проблеме, - это прочитать размер входного файла в байтах (в данном случае длинную строку), разделить это значение на n,и затем использовать это как ограничение размера первых n-1 файлов, а последний файл содержит всю оставшуюся строку

Я думаю, что если я использую этот метод, последний файл может быть чрезмерно большим по сравнению с другими.

Но проблема в том, что размер моего последнего файла намного больше моего ожидания.

Например, если я использую эту строку размером 545 байт:

input_string = '''
The Project Gutenberg EBook of Metamorphosis, by Franz Kafka
Translated by David Wyllie.

This eBook is for the use of anyone anywhere at no cost and with
almost no restrictions whatsoever.  You may copy it, give it away or
re-use it under the terms of the Project Gutenberg License included
with this eBook or online at www.gutenberg.net

** This is a COPYRIGHTED Project Gutenberg eBook, Details Below **
**     Please follow the copyright guidelines in this file.     **


Title: Metamorphosis

Author: Franz Kafka

Translator: David Wyllie
'''

когда n = 3, мой код ниже генерирует выходные данные размером 181, 199 и 261 байт, что в сумме составляет 641 байт! как мне решить эту проблему?

n=3
i, j, k, z = 0, 0, 0, 0
rows = input_string.split('\n') #split string into 'nline' list elements
file_size = len(input_string.encode('utf-8')) #track bytes of input
size_limit = int(file_size / n)
size_each = 0


#create n number of empty list
lists = []
for z in range(n):
    lists.append([])

while i < (n-1):
    while size_each < size_limit:       
        lists[i].append(rows[k]+'\n')
        size_each = len(str(lists[i]).encode('utf-8'))
        k += 1
    print(size_each)
    size_each = 0
    i+=1

while k < len(rows):       
    lists[i].append(rows[k]+'\n')
    size_each = len(str(lists[i]).encode('utf-8'))
    k += 1
print(size_each)   
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...