LINUX.ORG.RU

Оптимальный код для замены символа в строке?

 ,


0

1

Что-то у меня ад какой длинный код выходит для простой замены символа в строке файла.

Задача:

Открываем файл
Считаем строки
Забираем 3 строку например
Заменяем в ней 6 символ например
Пишем
Закрываем

У меня получается так:
Открыл
Посчитал
Создал переменную для 3 строки
Посчитал в ней количество символов
Заменил 6 символ
Заменил 3 строку в файле моей переменной
Закрыл

Это можно реализовать 3 строками максимум? Тк очень часто будет использоваться легкость приветствуется.

Если тебе размер не критичен, используй json или xml.

Если критичен, вынеси в отдельную процедуру или класс (если структура сложная).

schizoid ★★★ ()

зачем для этого питон?

не проще ли седом проходиться?

silw ★★★★★ ()

Тк очень часто будет использоваться

Отдельный метод.

damnemall ()

только алгоритм чуток другой :)

прочёл файл, заменил символ, записал файл.

а то ваш вариант работает только с символами фиксированной длины (utf8 пролетает).

MKuznetsov ★★★★★ ()

Это можно реализовать 3 строками максимум? Тк очень часто будет использоваться легкость приветствуется

L = open('myfile').readlines()
L[3] = L[3][:6]+'a'+L[3][7:]
open('myfile', 'w' ).writelines(L)

но все равно лучше конечно оформить в отдельный метод.

AIv ★★★★★ ()

А что метод replace строк использовать уже немодно?

string="abcdef"
print string.replace(string[3], "k")

Virtuos86 ★★★★★ ()

А, задание-то другое. Ну ладно, я только проснулся, не разобрал).

Virtuos86 ★★★★★ ()

прямой посимвольный fwrite() самое быстрое если утф не важен

bga_ ★★★ ()
Ответ на: комментарий от AIv

ЗЫ Если важна производительность, надо мапить нужный кусок файла и не выпендриваться. Но ТС просил как можно проще, а не как можно быстрее.

AIv ★★★★★ ()
Ответ на: комментарий от aedeph_

Для этого есть "".join

Выглядит одинаково хреново, join чуть быстрее и чуть менее понятно. Чуть более идеологически верно

l = list(L[i])
l[j] = ...
L[i] = ''.join(l)
но это еще более громоздко.

Однако больше всего меня порадовала третья строчка. Индескация-то с нуля.

У ТС-а написано

Забираем 3 строку например

Поскольку индеКСация с нуля, я в таких случаях воспринимаю 3 как индекс, а не как номер.

AIv ★★★★★ ()
Ответ на: комментарий от AIv

Выглядит хреново, однако это именно то, чем следует пользоваться для конкатенации строк в питоне.

я в таких случаях воспринимаю 3 как индекс

Да ты, биоробот, совсем уже русский язык забыл, видно.

aedeph_ ★★ ()
Ответ на: комментарий от aedeph_

Выглядит хреново, однако это именно то, чем следует пользоваться для конкатенации строк в питоне.

Рекомендации от aedeph_?;-)

Да ты, биоробот, совсем уже русский язык забыл, видно.

В русском языке, когда хотят указать именно порядковый номер элемента, числа пишутся словами а не цифрами (если возможно обозначить число одним словом), либо пишется фраза типа «элемент номер ХХХ». Прежде чем апеллировать к русскому языку, неплохо бы ознакомиться с редакционными требованиями и следить за тем что спеллчекер выделяет, будет меньше опечаток.

AIv ★★★★★ ()
Ответ на: комментарий от AIv

Это рекомендация официальной документации, ироничный ты мой.

В русском языке, когда хотят указать именно порядковый номер элемента, числа пишутся словами а не цифрами

Это в каком Мухосранске такому учат?

aedeph_ ★★ ()
Ответ на: комментарий от aedeph_

Возведение РЕКОМЕНДАЦИЙ из документации в абсолют, и тыкание всех окружающих в эти рекомендации, довольно таки достоверный признак школоты. Когда ничем больше козырнуть нельзя, козыряют знанием документации... И к счастью я не твой, деточка.

Это в каком Мухосранске такому учат?

В школе такому учат. И в издательствах, напр в из-ве Наука. И мне не нравится твой тон.

AIv ★★★★★ ()
Ответ на: комментарий от AIv

Сколько эмоций. Рекомендации в официальной документации - это лишь рекомендации, да ты капитан.

В школе такому учат

Это ложь. Ну или тебе очень сильно не повезло со школой.

И в издательствах, напр в из-ве Наука.

Это не так, в чем легко убедиться, почитав требования к оригинал-макету.

И мне не нравится твой тон.

Ужас-то какой.

aedeph_ ★★ ()
Ответ на: комментарий от aedeph_

Рекомендации в официальной документации - это лишь рекомендации, да ты капитан.

Нукося, просвети меня убого, чем в данном конкретном случае join лучше чем +. Я весь внимание.

Это не так, в чем легко убедиться, почитав требования к оригинал-макету.

Я не знаю какие ты там требования читаешь (и причем здесь требования к оригинал-макету - то о чем мы говорим это чисто редакторская вещь, требования к оригинал макету это требования к верстке, т.е. совсем другой уровень), но то, что скажем по русски пишут «третья строка» или «строка номер 256», но никак не «строка 3» знает любой хоть чуть-чуть работавший над текстом с любым вменяемым редактором/корректором.

Ужас-то какой.

То что ты хамишь не только тут а вообще непрерывно я уже понял, проглядев твои посты в других темах. По делу (и по возможности вежливо) что то можешь сказать?

AIv ★★★★★ ()
Ответ на: комментарий от AIv

Но ТС просил как можно проще, а не как можно быстрее.

я не понимаю что может быть проце копирования потоков с доабвлениям туда счетчика встречающихся '\n' с последующим подсчетом символов после нужного повторения, эдакий state-machine на два-три состояния, требует одной переменной на счетчик и одной на состояние/

belous_k_a ()
Ответ на: комментарий от AIv

в данном конкретном случае join лучше чем +

Скорость, единообразие синтаксиса для любых итерабельных объектов.

Я не знаю какие ты там требования читаешь

Я просто зашёл на сайт редакции издательства «Наука» и нашёл первое попавшееся порядковое числительное в виде числа.

по русски

Заканчивай позориться уже, чучоный.

aedeph_ ★★ ()
Ответ на: комментарий от aedeph_

Скорость, единообразие синтаксиса для любых итерабельных объектов.

Слив засчитан. Ускорение в данном конкретном случае будет канечно аццкое, с учетом того что ТС читает а потом пишет в файл. Иди читай доки дальше, и добро пожаловать в список друзей.

Я просто зашёл на сайт редакции издательства «Наука» и нашёл первое попавшееся порядковое числительное в виде числа.

Ты на сайт зашел, а я там работал.

AIv ★★★★★ ()
Ответ на: комментарий от AIv

Ускорение в данном конкретном случае будет канечно аццкое

Ускорения в данном конкретном случае не будет. Но если не видно разницы, зачем платить больше? Про единообразный синтаксис ты умолчал. Похоже, слился тут только ты, да еще и

добро пожаловать в список друзей.

со спецэффектами.

Ты на сайт зашел, а я там работал.

Очень сильно надеюсь, что не редактором.

aedeph_ ★★ ()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.