Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > Python: Общие вопросы > Случайный выбор строки из файла


Автор: ShaiTan 10.8.2011, 07:54
Дан текстовый фаил со списком ссылок. 
Каждая ссылка в новой строке.
Количество строк неизвестно.
Нужно взять случайную строку и обработать urllib.
Как грамотно реализовать на питоне?

Автор: Stolzen 10.8.2011, 13:35
Код

>>> import random
>>> random.choice([line for line in open('somefile.txt', 'r')])[:-1]


[:-1] нужен чтобы перевод каретки не мешался (он в конце каждой строки)

Автор: stalk13 10.8.2011, 16:03
Что-бы не читать весь файл целиком, я бы сделал так:

Код

import os
from random import randint

def readback(fp, pos):
    while pos >= 0:
        fp.seek(pos)
        yield fp.read(1)
        pos -= 1

def readrand(filename):
    size = os.path.getsize(filename)
    offset = randint(0, size - 1)

    with open(filename) as fp:
        for char in readback(fp, offset):
            if char == '\n':
                break
        else:
            fp.seek(0)

        return fp.readline()

print(readrand('test.txt'))

Автор: ShaiTan 27.8.2011, 00:53
Ага, спасибо.
Код

line = random.choice([line for line in open('file.txt', 'r')])[:-1]

Реально присвоить 'line' произвольное значение, если 'file.txt' пуст?

Автор: Dagger 29.8.2011, 14:57
если файл пуст надо хендлить IndexError - random.choice именно этот эксцепшн выкинет

Добавлено через 43 секунды
ну или
Код

    
line = random.choice([line for line in open('file.txt', 'r')] or [-1])[:-1]


Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)