Найти - Пользователи
Полная версия: текст А и В, если строчка из текста В есть в А - удалить ее
Начало » Python для новичков » текст А и В, если строчка из текста В есть в А - удалить ее
1 2 3 4
superduck
2 expee
у тебя второй файл где лежат строки для удаления, содержит сколько строк ? если конечно во втором файле пару строк, тогда работает быстро)

у меня первый - 450к, второй - 350к
expee
Одну :D

А мы тут равняемся в скорости.

Кстати код Ed'а валится:
AttributeError: ‘list’ object has no attribute ‘difference’
upd:

Сейчас протестировал на двух файлах одинаковых с 180 000 строк по 150 символов каждая. Т.о. в new должно быть пусто.
expee@localhost:~/dev/python$ time python hehe.py

real 0m2.310s
user 0m0.524s
sys 0m0.184s
expee@localhost:~/dev/python$ time python hehe.py

real 0m1.295s
user 0m0.552s
sys 0m0.168s
expee@localhost:~/dev/python$ time python hehe.py

real 0m0.694s
user 0m0.496s
sys 0m0.192s
expee@localhost:~/dev/python$ time python hehe.py

real 0m0.736s
user 0m0.516s
sys 0m0.188s
expee@localhost:~/dev/python$
И это на моем дюроне с 1.2 mhz и 378мб ram =/ У вас должно быть маленько побыстрее.
superduck
я хз откуда у тебя такие цифры .. мб ты нечаяно скрипт на тесле запускаешь?))
у меня даже 7к строк выполняются 5сек
intel T5800 3G озу
expee
Хорошо бы :) Но увы, это суровая реальность - amd duron 1200 =/

Вот полный лог сессии в консоли:
expee@localhost:~$ cd dev/python/
expee@localhost:~/dev/python$ ls -l
total 53396
-rw-r–r– 1 expee expee 438 2009-12-31 13:12 hehe.py
-rw-r–r– 1 expee expee 27333306 2009-12-31 12:57 lines
-rw-r–r– 1 expee expee 27333306 2009-12-31 12:57 text
expee@localhost:~/dev/python$ time python hehe.py

real 0m3.976s
user 0m0.468s
sys 0m0.160s
expee@localhost:~/dev/python$ time python hehe.py

real 0m0.831s
user 0m0.544s
sys 0m0.144s
expee@localhost:~/dev/python$ time python hehe.py

real 0m0.690s
user 0m0.504s
sys 0m0.180s
expee@localhost:~/dev/python$
Отсюда видно, что lines и text имеют одинаковый размер ~26мб. И последующие замеры - первый выполняется долго (но не > 5 минут, как сказали), а последующие быстро. У тебя должно быть довольно быстро :)
Kogrom
expee
Кстати код Ed'а валится:
AttributeError: ‘list’ object has no attribute ‘difference’
Откуда там взялся list? Там же set.

Код от Ed смешивает все строки, когда упорядочивает в set. Это можно было бы считать дефектом, но условию не противоречит.

Добавлено позже: а вот то, что он удаляет из B одинаковые строки, которых нет в A - это уже дефект.

Ещё добавлено: вам надо составит скрипт, который генерит файлы A и B для теста. А то вы сравниваете разные файлы.
Ed
Kogrom
Откуда там взялся list? Там же set.
Я тоже не понимаю откуда :)

а вот то, что он удаляет из B одинаковые строки, которых нет в A - это уже дефект.
Это где? Я старался сделать так, как в исходном варианте было.
Там же тоже set делается, гляньте внимательнее. Или я не о том?

Ещё добавлено: вам надо составит скрипт, который генерит файлы A и B для теста. А то вы сравниваете разные файлы.
Согласен. Думаю, что лучший источник - данные superduck, как топикстартера.
В моих экспериментах я брал 2 одинаковых файла с уникальными строками, чтобы обеспечить наибольшую загрузку.
Kogrom
Ed
Это где? Я старался сделать так, как в исходном варианте было.
Там же тоже set делается, гляньте внимательнее. Или я не о том?
Да. Но автор темы тоже делает больше того, что в задании написано.

Если взять какой-нибудь конкретный пример, типа надо удалить из лога какого-нибудь чата все стандартные сообщения сервера. Все стандартные сообщения мы поместили в файл B, а лог - в файл A. Тогда на выходе мы можем получить совсем не то, что ожидали, а мешанину сообщений.
Ed
Kogrom
Да. Но автор темы тоже делает больше того, что в задании написано.
Для меня заданием было ускорить скрипт топикстартера, а не то, что стоит в топике темы.
Я исходил из того, что скрипт его устраивает, нужно только ускорить его.

Кстати, по моему его мое решение устроило.
superduck
да, Ed, спс ещё раз, твоё решение устроило.. порядок строк не имеем никакого значения значения.
Ed
expee
Вот полный лог сессии в консоли:
Вот мой аналогичный лог. Файлы поменьше, правда и питон у меня 2.5, поэтому я убрал использование with:
$ cat hehe.py
#!/usr/bin/env python
# coding=utf-8

lines = open('lines').readlines()
intxt = open('text').read()

for line in lines:
intxt = intxt.replace(line, '')

f = open('new', 'w')
f.write(intxt.replace('\n\n', '\n'))
f.close()
$ ls -la 
total 23564
drwxr-xr-x 2 ed ed 4096 2009-12-31 14:07 .
drwxr-xr-x 7 ed ed 4096 2009-12-31 14:01 ..
-rwxr-xr-x 1 ed ed 227 2009-12-31 14:07 hehe.py
-rw-r--r-- 1 ed ed 12038359 2009-12-31 14:01 lines
-rw-r--r-- 1 ed ed 12038359 2009-12-31 14:02 text
$ time python hehe.py

real 9m43.283s
user 8m35.180s
sys 1m5.836s
Интересно, а как мой скрипт себя показал на ваших данных? Или он все еще падает :) ?
This is a "lo-fi" version of our main content. To view the full version with more information, formatting and images, please click here.
Powered by DjangoBB