locky_kid
Фев. 6, 2013 10:08:51
warik
Фев. 6, 2013 11:07:00
1. Обращение к файлу в смысле чтение из файла?
open(pfth_to_file, mode)
2. Текст извлекать с помощью re
locky_kid
Фев. 6, 2013 15:45:07
Спасибо!
Не могли бы Вы подсказать, как перекодировать URL в читабельный вид?
warik
Фев. 6, 2013 17:00:21
Если ссылку читаете из файла, то стоит по-пробовать читать не через open, а через
codecs.open. А вообще, не знаю) Стоит поискать.
locky_kid
Фев. 6, 2013 23:00:47
warik и reclosedev, спасибо Вам!
Ваши наводки мне изрядно помогли)
Но тут возникла проблема, мой ламерский код не учел, что логи записываются одной строкой подряд, а именно:
ms3-002 HTTP_REFERER=
http://yandex.ru/yandsearch?text=%D0%B0%D0%BD%D1%81%D0%B0%D0%BC%D0%B1%D0%BB%D1%8C%20%D0%B8%D0%BC%D0%BF%D1%83%D0%BB%D1%8C%D1%81%20%D0%B3%20%D1%87%D0%B5%D0%BB%D1%8F%D0%B1%D0%B8%D0%BD%D1%81%D0%BA&clid=40795&lr=56&msp=1@@reqid=1295795800745739-1646521006967082442799851-7-029@@btt=297@@u=@@reg=56@@cltr=7@@dtype=iweb@@path=231.8@@at=3@@uah=359629205@@url=http://video.yandex.ru/search.xml?text=%D0%B0%D0%BD%D1%81%D0%B0%D0%BC%D0%B1%D0%BB%D1%8C%20%D0%B8%D0%BC%D0%BF%D1%83%D0%BB%D1%8C%D1%81%20%D0%B3%20%D1%87%D0%B5%D0%BB%D1%8F%D0%B1%D0%B8%D0%BD%D1%81%D0%BA&where=all&id=64205772-00ms3-002 HTTP_REFERER=
http://yandex.ua/yandsearch?p=1&text=%D0%B3%D1%80%D1%83%D0%BF%D0%BF%D0%B0+%D0%BA%D1%80%D1%83%D0%B8%D0%B7+%D0%B2%D0%B8%D0%B4%D0%B5%D0%BE&lr=142&tld=ua@@reqid=1295795808784874-823414473724779076058684-7-017-p1@@btt=281@@u=@@reg=142@@cltr=7@@dtype=iweb@@path=231.8@@at=3@@uah=2572539484@@url=http://video.yandex.ru/search.xml?text=%D0%B3%D1%80%D1%83%D0%BF%D0%BF%D0%B0%20%D0%BA%D1%80%D1%83%D0%B8%D0%B7%20%D0%B2%D0%B8%D0%B4%D0%B5%D0%BE&where=all&id=15292606-00 и так далее еще очень прилично строчек, в идеале десятки-сотни тысяч (жирным выделил начало и конец каждой строки)
Может быть, кто-нибудь знает, какой функцией из библиотеки
re можно тут обойтись? Если с регулярным выражением, то какой его примерно вид? Очень круто было бы иметь возможно вытаскивать подстроку в диапазоне
“text=…&” . С такой штукой решились бы все мои проблемы

Может быть, стоит просто расставить переводы строк (\n)? Но опять же как это сделать в нужных местах?
Сам я новичок, и сижу так плотно за python'ом впервые.
locky_kid
Фев. 7, 2013 00:28:59
еще возникает вот такая ошибка:
Traceback (most recent call last):
File “trop_u2.py”, line 21, in <module>
line = extract(line) #парсим (моя функция обработки строки)
File “trop_u2.py”, line 13, in extract
print(d)
File “c:\python33\lib\encodings\cp866.py”, line 19, in encode
return codecs.charmap_encode(input,self.errors,encoding_map)
UnicodeEncodeError: ‘charmap“ codec can’t encode character '\ufffd” in position
21 : character maps to <undefined>
часть логов парсится нормально, но при работе с остальными возникает такая ошибка (выделил черным)
помогите, пожалуйста
dimy44
Фев. 7, 2013 01:20:34
собственно если всю фигню разбить, то можно как-то так:
text = """HTTP_REFERER=http:// yandex.ru/yandsearch?text=%D0%B0%D0%BD%D1%81%D0%B0%D0%BC%D0%B1%D0%BB%D1%8C%20%D0%B8%D0%BC%D0%BF%D1%83%D0%BB%D1%8C%D1%81%20%D0B3%20%D1%87%D0%B5%D0%BB% D1%8F%D0%B1%D0%B8%D0%BD%D1%81%D0%BA&clid=40795&lr=56&msp=1@@reqid=1295795800745739-1646521006967082442799851-7-029@@btt=297@@u=@@reg=56@@ cltr=7@@dtype=iweb@@path=231.8@@at=3@@uah=359629205@@url=http://video.yandex.ru/search.xml?text=%D0%B0%D0%BD%D1%81%D0%B0%D0%BC%D0%B1%D0%BB%D1%8C% 20%D0%B8%D0%BC%D0%BF%D1%83%D0%BB%D1%8C%D1%81%20%D0%B3%20%D1%87%D0%B5%D0%BB%D1%8F%D0%B1%D0%B8%D0%BD%D1%81%D0%BA&where=all&id= 64205772-00ms3-002 HTTP_REFERER=http://yandex.ua/ yandsearch?p=1&text=%D0%B3%D1%80%D1%83%D0%BF%D0%BF%D0%B0+%D0%BA%D1%80%D1%83%D0%B8%D0%B7+%D0%B2%D0%B8%D0%B4%D0%B5%D0%BE&lr=142&tld=ua@@ reqid=1295795808784874-823414473724779076058684-7-017-p1@@btt=281@@u=@@reg=142@@cltr=7@@dtype=iweb@@path=231.8@@at=3@@uah=2572539484@@url=http://video.yandex.ru/search.xml?text=%D0%B3%D1%80%D1%83%D0%BF%D0%BF%D0%B0%20%D0%BA%D1%80%D1%83%D0%B8%D0%B7%20%D0%B2%D0%B8%D0%B4%D0%B5%D0%BE&where=all&id=15 292606-00"""
import re
p = r'((?<=&|\?|@)[a-zA-Z]+=)'
L = []
for t in re.split(p, text):
L.append(t)
if not t.endswith('='):
print ''.join(L)
L[:] = []
>>>
HTTP_REFERER=http:// yandex.ru/yandsearch?
text=%D0%B0%D0%BD%D1%81%D0%B0%D0%BC%D0%B1%D0%BB%D1%8C%20%D0%B8%D0%BC%D0%BF%D1%83%D0%BB%D1%8C%D1%81%20%D0B3%20%D1%87%D0%B5%D0%BB% D1%8F%D0%B1%D0%B8%D0%BD%D1%81%D0%BA&
clid=40795&
lr=56&
msp=1@@
reqid=1295795800745739-1646521006967082442799851-7-029@@
btt=297@@
u=@@
reg=56@@ cltr=7@@
dtype=iweb@@
path=231.8@@
at=3@@
uah=359629205@@
url=http://video.yandex.ru/search.xml?
text=%D0%B0%D0%BD%D1%81%D0%B0%D0%BC%D0%B1%D0%BB%D1%8C% 20%D0%B8%D0%BC%D0%BF%D1%83%D0%BB%D1%8C%D1%81%20%D0%B3%20%D1%87%D0%B5%D0%BB%D1%8F%D0%B1%D0%B8%D0%BD%D1%81%D0%BA&
where=all&
id= 64205772-00ms3-002 HTTP_REFERER=http://yandex.ua/ yandsearch?
p=1&
text=%D0%B3%D1%80%D1%83%D0%BF%D0%BF%D0%B0+%D0%BA%D1%80%D1%83%D0%B8%D0%B7+%D0%B2%D0%B8%D0%B4%D0%B5%D0%BE&
lr=142&
tld=ua@@ reqid=1295795808784874-823414473724779076058684-7-017-p1@@
btt=281@@
u=@@
reg=142@@
cltr=7@@
dtype=iweb@@
path=231.8@@
at=3@@
uah=2572539484@@
url=http://video.yandex.ru/search.xml?
text=%D0%B3%D1%80%D1%83%D0%BF%D0%BF%D0%B0%20%D0%BA%D1%80%D1%83%D0%B8%D0%B7%20%D0%B2%D0%B8%D0%B4%D0%B5%D0%BE&
where=all&
id=15 292606-00