Случайный выбор строки из файла

 
0
 
Python
ava
ShaiTan | 10.08.2011, 08:54
Дан текстовый фаил со списком ссылок.
Каждая ссылка в новой строке.
Количество строк неизвестно.
Нужно взять случайную строку и обработать urllib.
Как грамотно реализовать на питоне?
Kommentare (4)
ava
Stolzen | 10.08.2011, 13:35 #

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


[:-1] нужен чтобы перевод каретки не мешался (он в конце каждой строки)
ava
stalk13 | 10.08.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'))
ava
ShaiTan | 27.08.2011, 00:53 #
Ага, спасибо.

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

Реально присвоить 'line' произвольное значение, если 'file.txt' пуст?
ava
Dagger | 29.08.2011, 14:57 #
если файл пуст надо хендлить IndexError - random.choice именно этот эксцепшн выкинет

später ergänzt:
ну или


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

Registrieren Sie sich oder melden Sie sich an, um schreiben zu können.
Unternehmen des Tages
Вы также можете добавить свою фирму в каталог IT-фирм, и публиковать статьи, новости, вакансии и другую информацию от имени фирмы.
Подробнее
Mitwirkende
advanced
Absenden