Используйте random.shuffle
для рандомизации последовательности:
import random
with open('filename', 'rb') as infile:
lines = infile.readlines()
random.shuffle(lines)
with open('newfilename', 'wb') as outfile:
outfile.writelines(lines)
Редактировать: Метод перетасовки, предложенный в другом ответе, является неправильным. Смотрите комментарии и ссылки там. Вот более правильный пример перемешивания:
end = len(lines) - 1
for i in range(end + 1):
choice = random.randint(i, end)
lines[i], lines[choice] = lines[choice], lines[i]
После этого тасования, предполагая совершенную случайность из randint
, позиция линии полностью некоррелирована с ее положением перед тасованием. Используя наивный алгоритм в другом ответе, это не так. Оба шаффла выполняют одинаковое количество операций.