Как рассчитать размер файла текстового файла, который я хочу сгенерировать? - PullRequest
0 голосов
/ 02 февраля 2020

У меня есть генератор списков слов

import itertools 

s=[ [ 'T', 't'],
    ['E', 'e'],
    ['S', 's'],
    ['T', 't']
]

out = (itertools.product(*s))
for index, entry in enumerate(out): 
    result = ''.join(entry) 
    print(result)
    textfile = open("wordlist.txt","a")
    textfile.write(result)
    textfile.write("\n")
    textfile.close()

Как проверить и напечатать размер текстового файла (в ГБ или КБ), который будет сгенерирован перед сохранением файла? Например:

python test.py
You will need 20GB to generate wordlist.txt

Ответы [ 3 ]

0 голосов
/ 02 февраля 2020

IIU C, возможно, вы можете проверить это:

import numpy as np
nw = len(s)     # number of word characters
nc = np.prod([len(sub) for sub in s])    # number of combinations

size_on_disk = (nw + 1) * nc     # (nw + 2) * nc in case of Windows as of CRLF line endings

Это должно дать вам размер файла в байтах, который вы можете express в кБ, МБ или как угодно легко, разделив на 1024 ** п.

0 голосов
/ 03 февраля 2020

Вы можете взять общую длину всех слов в s, затем умножить ее на общее количество «ячеек» (количество строк * количество столбцов) и принять во внимание длину разделителя новой строки в вашей системе. Например:

import os

# we assume s isn't sparse and each row has the same amount of columns as the first
multiplier = len(s) * len(s[0])
size = (sum(sum(len(el) for el in els) for els in s) + len(os.linesep)) * multiplier
print(f'required space is {size:,} bytes')
0 голосов
/ 02 февраля 2020

Вы можете проверить размер файла, используя эту функцию:

import os

def get_file_size(file_name, size_type = SIZE_UNIT.BYTES ):
    """ Get file in size in given unit like KB, MB or GB"""
    size = os.path.getsize(file_name)
    return convert_unit(size, size_type)


size = get_file_size("wordlist.txt", SIZE_UNIT.GB)
print('Size of file is : ', size ,  'GB')
...