Хотя я опоздал на четыре года, я думаю, что у меня самое быстрое решение. Недавно я написал пакет python linereader , который позволяет вам манипулировать указателями файловых дескрипторов.
Вот простое решение для получения случайной строки с помощью этого пакета:
from random import randint
from linereader import dopen
length = #lines in file
filename = #directory of file
file = dopen(filename)
random_line = file.getline(randint(1, length))
Первый раз, когда это делается, является наихудшим, поскольку программа чтения строк должна скомпилировать выходной файл в специальном формате. После того, как это будет сделано, читатель может быстро получить доступ к любой строке из файла, независимо от размера файла.
Если ваш файл очень маленький (достаточно маленький, чтобы поместиться в МБ), то вы можете заменить dopen
на copen
, и он сделает кэшированную запись файла в памяти. Мало того, что это быстрее, но вы получите количество строк в файле, когда он загружен в память; это сделано для вас. Все, что вам нужно сделать, это сгенерировать случайный номер строки. Вот пример кода для этого.
from random import randint
from linereader import copen
file = copen(filename)
lines = file.count('\n')
random_line = file.getline(randint(1, lines))
Я просто очень обрадовался, потому что увидел кого-то, кто мог бы извлечь выгоду из моей посылки! Извините за мертвый ответ, но пакет определенно может быть применен ко многим другим проблемам.