- У меня есть файл неизвестной длины от 1 до ~34 миллиардов (2^35)
- Я хочу запустить некоторый процесс $P$, который занимает при вводе каждой строки файла.
- Я хочу, чтобы P запускался на случайных входных данных, то есть случайных строках файла.
- Я хочу, чтобы P никогда не запускался. дважды в одной и той же строке
Решение 1 :
откройте файл, выберите случайную строку, вытащите ее из файла, запустите P.
Проблема 1: я знаю, как это сделать с первой строкой файла, использующей этот код, который я получил ранее сегодня, но не с случайной строкой из файла, который я даже не могу открыть полностью, чтобы проверить, насколько он длинный.
Код: Выделить всё
def pop(self, file):
### pop the first line from given file (aka removes it from the input file)
with open(file, 'r+') as f: # open file in read / write mode
firstLine = f.readline() # read the first line and throw it out
data = f.read() # read the rest
f.seek(0) # set the cursor to the top of the file
f.write(data) # write the data back
f.truncate() # set the file size to the current size
return firstLine
def fifo(input):
return pop(input, input)
Выполните предыдущий код, предварительно случайно перетасовав строки файла один раз.
Для контекста строки соответствуют всем двоичным числам по 35 бит. Это код, который я использовал:
Код: Выделить всё
def allBits(n):
if n: yield from ( bits+bit for bits in allBits(n-1) for bit in ("0","1") )
else: yield ""
def layer2():
L = allBits(35)
numpy.random.shuffle(L)
f = open(filename, mode = 'w')
for e in L:
f.write(e+';\n')
Код: Выделить всё
File "XXX.py", line 20, in layer2
numpy.random.shuffle(L)
File "mtrand.pyx", line 4467, in numpy.random.mtrand.RandomState.shuffle
TypeError: object of type 'generator' has no len()
Подробнее здесь: https://stackoverflow.com/questions/790 ... -from-file