Модераторы: Daevaorn
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Случайный выбор строки из файла, случайная ссылка в urllib.urlopen 
:(
    Опции темы
ShaiTan
Дата 10.8.2011, 07:54 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 7
Регистрация: 21.8.2006

Репутация: нет
Всего: нет



Дан текстовый фаил со списком ссылок. 
Каждая ссылка в новой строке.
Количество строк неизвестно.
Нужно взять случайную строку и обработать urllib.
Как грамотно реализовать на питоне?
PM MAIL   Вверх
Stolzen
Дата 10.8.2011, 13:35 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1041
Регистрация: 17.10.2005

Репутация: 1
Всего: 48



Код

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


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


--------------------
datatalks.ru - анализ данных, статистика, машинное обучение
PM MAIL WWW   Вверх
stalk13
Дата 10.8.2011, 16:03 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 3
Регистрация: 14.5.2011

Репутация: нет
Всего: нет



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

Код

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'))


Это сообщение отредактировал(а) stalk13 - 10.8.2011, 16:05
PM MAIL   Вверх
ShaiTan
Дата 27.8.2011, 00:53 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 7
Регистрация: 21.8.2006

Репутация: нет
Всего: нет



Ага, спасибо.
Код

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

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

Это сообщение отредактировал(а) ShaiTan - 27.8.2011, 00:54
PM MAIL   Вверх
Dagger
Дата 29.8.2011, 14:57 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Экс. модератор
Сообщений: 377
Регистрация: 4.9.2002
Где: Киев

Репутация: 1
Всего: 8



если файл пуст надо хендлить IndexError - random.choice именно этот эксцепшн выкинет

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

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


PM MAIL WWW Skype   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Python: Общие вопросы | Следующая тема »


 




[ Время генерации скрипта: 0.0690 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.