Форум сайта python.su
IskatelНикто не спорит что файлов с текстом практически нет. Но нужен конструктив. Надо что-то менять с подходами или нет в тех таки случаях когда в файле текст? Все и так могут открыть файл open(“aaa.txt”,“rb”). И будет счастье.
но всеже: причем тут нафиг строки???
Офлайн
doza_and
когда в файле текст
Отредактировано Iskatel (Окт. 14, 2016 21:29:40)
Офлайн
doza_andТам квадратный поиск получается. Ты должен взять символ, раскодировать его, только после этого ты знаешь, куда сместиться, чтобы взять следующий символ и раскодировать его. И так для каждого символа. Если искомый символ в конце, ты сначала должен раскодировать всё, что стоит слева от него, шагая от символа к символу.
Для utf-8 - ввод вывод тривиален. Поиск по индексу именно буквы операция сложности O(N) где N длина строки.
Офлайн
py.user.nextНу и где тут квадратный? это алгоритм линейной сложности. Работа с потоком символов.
должен раскодировать всё, что стоит слева от него, шагая от символа к символу.
py.user.nextУ меня каждый второй скрипт такой. И не 1 -2 мегабайта а сотни мегабайт. Не факт что у всех так. Мы с ZZZ это уже обсуждали. Мне текстовых редакторов не хватает потому что они долго грузят большие текстовые файлы. :)
Сколько ты видел строк в памяти? Хотя бы мегабайт видел когда-нибудь?
drwxr-xr-x 1 user Отсутствует 0 Oct 15 07:25 _rels -rw-r--r-- 1 user Отсутствует 0 Oct 15 07:26 a -rw-r--r-- 1 user Отсутствует 5216977 Jan 1 1980 document.xml -rw-r--r-- 1 user Отсутствует 985 Jan 1 1980 endnotes.xml -rw-r--r-- 1 user Отсутствует 3490 Jan 1 1980 fontTable.xml
import time t0=time.clock() with open("aaa.txt","r") as f: a=list(f.readlines()) # a=f.read() t1=time.clock() print(t1-t0)
Отредактировано doza_and (Окт. 15, 2016 10:22:54)
Офлайн
doza_andТы имеешь в виду обработку данных, я же говорю про работу со строками. Не про данные, а про строки текстовые. Какая разница между этими понятиями? В строках есть понятие символа, а в данных такого понятия нет. И юникод позволяет работать вот с этими символами.
У меня каждый второй скрипт такой.
doza_andЯ давал ссылку, которую ты не читал, там есть пример. Берётся и открывается файл уже в заданной кодировке и проводятся переходы по символам. Не через tell(), а через seek(), который в текстовом режиме именно по символам прыгает, а не по байтам. И позицию в файле ты можешь запомнить именно символьную и всегда знать, какой он по счёту в файле.
Найдите в своем коде и приведите пример когда вам надо было позиционироваться в строке именно по номеру буквы.
doza_andКвадрат здесь в этом раскодировании необходимом.
Ну и где тут квадратный? это алгоритм линейной сложности. Работа с потоком символов.
>>> '탡탡탡' '\xed\x83\xa1\xed\x83\xa1\xed\x83\xa1' >>>
doza_andЛадно, вот тебе задача: поступает поток символов текста, нужно его разделить по абзацам и вернуть поток абзацев. (Абзац - десять предложений.)
Найдите в своем коде и приведите пример когда вам надо было позиционироваться в строке именно по номеру буквы.
'킠킡킢킣키킥킦킧킨킩킪킫킬킭킮킯킰킱킲킳킴킵킶킷킸킹킺킻킼킽킾킿타탁탂탃탄탅탆탇탈탉탊탋탌탍탎탏'
Отредактировано py.user.next (Окт. 15, 2016 10:17:16)
Офлайн
py.user.nextДа полностью с вами согласен. В этом смысле я со строками ни разу в жизни не работал. Мне надо обычно найти в строке (строке в смысле питона, которая прочитана из файла) заданный образец и что-то с ним сделать. Меня ни капельки не волнует сколько в нем букв или байт, я фрагмент просто копирую в программу из другого файла или набираю ручками, поскольку это в 99% случаев обычный ascii.
В строках есть понятие символа
py.user.nextТак дело не в учебных примерах. Я просил пример из ВАШЕГО ПРАКТИЧЕСКОГО опыта а не высосаный из пальца. Вы пока его не привели, поэтому к вашей писанине я пока отношусь как писанине теоретика программирования.
Я давал ссылку, которую ты не читал, там есть пример.
Отредактировано doza_and (Окт. 15, 2016 10:46:39)
Офлайн
doza_andЯ не могу тебе дать из практического, потому что там учебные нужно щёлкать, как орешки, а ты их не тянешь. Я тут давал уже задание про ёжика, никто не сделал. Не то, что оно сложное, оно просто имеет дело с реальным текстом.
Так дело не в учебных примерах. Я просил пример из ВАШЕГО ПРАКТИЧЕСКОГО опыта а не высосаный из пальца.
Отредактировано py.user.next (Окт. 15, 2016 10:56:06)
Офлайн
py.user.next:) Улыбнуло.
Я не могу тебе дать из практического, потому что там учебные нужно щёлкать, как орешки, а ты их не тянешь.
Офлайн
Представь себе просто бесконечный поток данных, который нужно обрабатывать, складывая результат обработки в базу данных. Что ты собрался загружать в память, если поток бесконечный?
doza_andВот ты писал
:) Улыбнуло.
with open("aaa.txt","r") as f: a=list(f.readlines())
with open("aaa.txt","r") as f: a=list(list(f.readlines()))
Отредактировано py.user.next (Окт. 16, 2016 04:00:33)
Офлайн
py.user.nextДа блин, век живи век учись. Спасибо! Не думал что в питоне 3 вернут список а не итератор. На этом потеряли 0.1 сек. И это ровным счетом никак не повлияло на выводы.
Нафиг ты результат readlines() к списку приводишь?
py.user.nextНе то что редко. Я так вообще никогда не пишу. Для маленьких файлов до гигабайта вообще нет смысла морочиться а скорость обработки выше. А большие файлы читать конструкциями
что ты редко пишешь
f=open("...","r) for i in f: ....
Офлайн