Как добавить в конец строки символ python
Перейти к содержимому

Как добавить в конец строки символ python

  • автор:

добавить символ в конец строки

Всем привет! делаю скрипт по изменению строк, замена последнего символа строки получилась (спасибо здешним спецам по Python), а вот с добавлением нового символа проблема. Почему то ничего не добавляет на else (нужно к строке, которая попадает на else добавить символ). Плюс чувствую копчиком что обилие строк с elif можно заменить одной строкой:

#скрипт заменяет цифру на следующую в конце, если в конце буква- добавляет цифру 1 inp = open (inp.txt', 'r') out = open ('out.txt', 'w') #тут читаю файл построчно for line in inp: # Удаляем символы переноса строки с конца line = line.rstrip('\r\n') # Записываем всю строку, кроме последнего символа out.write(line[:-1]) # Проверяем последний символ if line[-1] == '1': out.write('2') elif line[-1] == '2': out.write('3') elif line[-1] == '3': out.write('4') elif line[-1] == '4': out.write('5') elif line[-1] == '5': out.write('6') elif line[-1] == '6': out.write('7') elif line[-1] == '7': out.write('8') elif line[-1] == '8': out.write('9') elif line[-1] == '9': out.write('0') else: line.join('1') # Добавляем перенос строки out.write('\n') inp.close() out.close() print ('Работа завершена. Изменено '+ str(sum(1 for line in open('out.txt', 'r'))) + str(' строк')) 

Отслеживать

задан 25 мар 2017 в 19:49

941 2 2 золотых знака 21 21 серебряный знак 41 41 бронзовый знак

line.join(‘1’) вы забыли out.write

25 мар 2017 в 20:00

да точно, out.write помог добавить символ, но незадача в том, что на else я хочу не удалять конец строки (как это делается тут # Записываем всю строку, кроме последнего символа out.write(line[:-1])), а к существующей строке, которая попадает под условие else добавить цифру 1 (увеличить длину строки на 1 символ)

25 мар 2017 в 20:18

Попробуйте: out.write(line+’1′)

Добавление символа в конец строки

Удалите из строки символы с 4 по 8 и добавьте 2 новых символа в конец
Пусть дана строка из произвольных символов. Удалите символы с 4 по 8 и добавьте 2 новых символа в.

Добавление символа в конец строки
char c,st=""; Я хочу формировать строку st, добавляя в ее конец символы c один за другим. Как.

Добавление символа в конец введенной строки
Очень нужна помощь, нужно в конец введенной строки поместить символ ‘$’ чтобы не было зацикливания.

Добавление определённого символа в конец и начало каждой строки
Всем привет. Есть файлик допустим он TXT. В нем много строк. Надо в каждую строку в начале и в.

151 / 102 / 33
Регистрация: 11.08.2016
Сообщений: 574

каждая i это строка, заканчивающаяся на linesep. то есть вы записываете в каждой итерации вот что:
\n!
сначала надо убирать line terminator (rstrip), потом добавлять ! потом os.linesep.

Регистрация: 11.03.2017
Сообщений: 30
ничего не понял, код пришлите
151 / 102 / 33
Регистрация: 11.08.2016
Сообщений: 574

1 2 3
with open('/path/to/source') as s: with open('/path/to/destination', 'w') as d: d.writelines([l.rstrip('\n')+'!'+os.linesep for l in s.readlines()])

394 / 122 / 48
Регистрация: 26.10.2013
Сообщений: 734

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

151 / 102 / 33
Регистрация: 11.08.2016
Сообщений: 574

ЦитатаСообщение от Wi0M Посмотреть сообщение

не забывайте добавлять что это плохой стиль программирования

жду не дождусь обоснований. а пока их нет, то, в сочетании с нарочито менторско-покровительственным тоном высказывания, засчитывается успешная попытка суицида. чтобы трупик не задергался:

● что, скорее всего, имел в виду Wi0M: складывание строк в питонах может быть ресурсонеэффективной операцией. Однако учитывая контекст – строка в текстовом файле (размер которой от силы сотня байтов), об этом говорить смешно. конечно, если длина строк в вашем файле – десятки-сотни мегабайт, то лучше использовать StringIO. хотя еще лучше себя спросить несколько ранее – что я курю а текстовый ли это файл?

● может быть f-строчки? снова-таки в данном контексте ни о какой сравнимой эффективности речь не идет, а для ТС уверенно можно сказать, что плюсик ему будет понятнее. если конечно ему вообще что-то понятно, исходя из очевидного нежелания читать оффдоки.

● стиль? есть что-то более стильное для питона в отношении конкатенации строк? o’rly?

Просто Лис

Эксперт Python

5321 / 3335 / 1021
Регистрация: 17.05.2012
Сообщений: 9,768
Записей в блоге: 9

1 2 3 4
with open('/path/to/source') as s, open('/path/to/destination', 'w') as d: for line in s.read().split('\n'): d.write(line) d.write('!\n')

151 / 102 / 33
Регистрация: 11.08.2016
Сообщений: 574

Рыжий Лис, а в самой популярной ОС read().split(‘\n’) точно сработает как спланировано? не получится потом в итоге при записи line+’\r!\n’? нотепад сильно удивится

Просто Лис

Эксперт Python

5321 / 3335 / 1021
Регистрация: 17.05.2012
Сообщений: 9,768
Записей в блоге: 9
В твоём варианте с l.rstrip(‘\n’) тоже могут остаться \r .
151 / 102 / 33
Регистрация: 11.08.2016
Сообщений: 574

на самом деле не все так просто:

1. open(). если newline=None, то [line terminators] … translated into ‘\n’ before being returned to the caller. очевидно, что это верно для readline*(), но совершенно не очевидно, что верно для read(). это несколько против шерсти: read() когда надо читать строки; в документации io неочевидность не устраняется, так что как бы себя это не вело в текущей версии, по идее может измениться.

2. writelines(): Line separators are not added, so it is usual for each of the lines provided to have a line separator at the end.

3. When writing output to the stream, if newline is None, any ‘\n’ characters written are translated to the system default line separator, os.linesep, так что может получиться line+’\r!\r\n’

Добавлено через 15 минут
upd: проверил из интереса, что получается при newline=None и read(). таки транслируется ‘\r\n’ в ‘\n’.
Можно конечно поспорить, насколько логична и необходима трансляция line terminators в тех случаях, когда мы про строки вообще не заикаемся.

blz, какая реакция)) задело тебя, да?)) и да я про f-строки)

Меню пользователя @ Wi0M

Эксперт Python

5416 / 3840 / 1214
Регистрация: 28.10.2013
Сообщений: 9,554
Записей в блоге: 1

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18
# только python 3.6 и выше open('11.txt','w').writelines( [f'!\n' for line in open("1.txt")] ) open('22.txt','w').writelines( map(lambda line:line[:-1] + "!\n",open("1.txt")) ) import re open('33.txt','w').write( re.sub("\n","!\n",open("1.txt").read()) ) # можно и без re open('44.txt','w').write( open("1.txt").read().replace("\n","!\n") )

blz. Трупик задергался и теперь я франкенштейн! Перед сном я как обычно крутил в голове ситуации где можно было поступить иначе и тут я вспомнил эту) Пораскинув мозгами, что я делать не захотел, когда сказал, что сложение строк через + это плохо. Ну теперь я созрел для ответа) А получается так потому что когда то я столкнулся с проблемой, решил ее, а в будущем говорю только решение) так как не помню я больше ничего) а зачем? чтобы объяснять свою позицию? да мне вообще пофиг как ты строки складываешь)) Суть тут проста, язык программирования у нас с динамической типизацией, а если вместо восклицательного знака захочешь пихнуть переменную, тебе нужно будет быть уверенным в том что это именно строка. Да, возможно, привести жестко в str было бы решением, но зачем? Каждый раз париться где ты привести типы забыл? или еще хуже проверять типы? да ну это как то бред, не кажется тебе? А сделать форматирование и выглядеть будет красивее и работать будет всегда. А сделать форматирование через словарь так вообще красота. И манипулировать результатом еще проще, когда тебе вдруг понадобится изменить формат результирующей строки.

1 2 3 4
endsymbol = 'bullshit' with open('test.txt') as s: with open('test1.txt', 'w') as d: d.writelines([''.format(start=l.rstrip('\n'), middle=endsymbol, end=os.linesep) for l in s.readlines()])

Да, конечно, для трех строк кода, это лишнее. А в жизни это маст хэв. один раз приучил себя делать строки через форматирование и навсегда забываешь о приведении типов перед сложением строк. Профит!

Меню пользователя @ Wi0M

Как добавить символ в конце каждой строки через Python?

С помощью Python можно решать не только таски, закинутые в бэклог продукта, но и обычные рутинные операции. Не важно парт-таймер ты в какой-то IT-компании или у тебя кроссовер-ивент с женщинами из бухгалтерии, которые попросили помочь. Микрозадачи всегда проще сделать, написав несколько строк кода. Сегодня поговорим об одной из таких

Во-первых, это красиво!

Предположим, что нам необходимо добавить в каждую строку текстового файла некоторые символы (буквы, числа, фразы — что угодно). В нашем случае нам нужно добавить -1. У нас есть два варианта — бесконечно копипастить или прогнать файл через питон. Второй вариант, очевидно, предпочтительней.

Итак, допустим, у нас имеется такой текстовый файл:

Откроем его через питон, а точнее через конструкцию with open … as, после которой закрывать файл (использовать close) не нужно. Режим r+ говорит о том, мы открываем файл в режиме чтения и записи.

Создаем список lines через функцию map (используется для применения функции к каждому элементу итерируемого объекта). Но так как map возвращает только объект map, мы его обернём в список с помощью функции list

Внутри у нас будет анонимная функция (lambda). В ней мы форматируем строки (format) по шаблону ‘<>-1\n’ (плейсхолдер пустой, добавляем -1, переходим на следующую строку). C помощью strip() удаляет начальные и конечные пробелы из строки. Метод readlines() считывает все строки всего файла и и возвращает список строк.

Далее возвращаемся в начало файла — f.seek(0) и перебираем строки.

with open("/content/sample_data/source_text.txt", 'r+') as f: lines = list(map(lambda x: '<>-1\n'.format(x.strip()), f.readlines())) f.seek(0) [f.write(l) for l in lines]

После обработки снова прочитаем:

f = open("/content/sample_data/source_text.txt", 'r', encoding='utf8') print(f.read())

В итоге у нас получится такой файл:

Как добавить символы в конце строки в python?

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

Примерно такой код:

ARRAY = [['text1', 20], ['text2', 21]] file_stat = open('text.csv', 'a+') line_stat = file_stat.readlines() for item in ARRAY: count = 'тут подсчет строк по поиску item[0]' // здесь пробовал несколько разных вариантов line_stat[item[1]] = line_stat[item[1]].rstrip('/n') + ',' + str(count) + '\n' file.write(line[item[1]])

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

  • Вопрос задан более трёх лет назад
  • 1634 просмотра

Комментировать
Решения вопроса 0
Ответы на вопрос 1

Zarom

Вы открыли файл с ключем a+ — на чтение и добавление в конец файла. Поэтому файл читается и строки добавляютс в конец.

Так же, вы пытаетесь явно сотворить какую-то велосипедную порнографию. В вашей задаче на работу с csv должна помочь библиотека pandas

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *