Уведомления

Группа в Telegram: @pythonsu

#1 Дек. 16, 2015 09:00:05

widg
Зарегистрирован: 2013-05-06
Сообщения: 23
Репутация: +  0  -
Профиль   Отправить e-mail  

Автозамена

в файле in.txt:

text@
text
text@
@
text
@

Надо заменить все символы @ на номер по порядку
Нашёл функцию replace и вот что написал:

n=1
word = "@"
o = open("out.txt","a") #open for append
for line in open("in.txt"):
    line = line.replace(word,str(n))
    n=n+1
    o.write(line + "\n") 
o.close()

но работает неправильно
получается она считает строки в которых нету символа :

text1
text
text3
4
text
6
помогите плиз

Офлайн

#2 Дек. 16, 2015 09:39:51

Firik
Зарегистрирован: 2015-12-02
Сообщения: 151
Репутация: +  6  -
Профиль   Отправить e-mail  

Автозамена

У вас счетчик увеличивается для каждой новой строки, а не только там, где есть этот символ.

Офлайн

#3 Дек. 16, 2015 09:42:05

botinag
Зарегистрирован: 2014-02-20
Сообщения: 179
Репутация: +  35  -
Профиль   Отправить e-mail  

Автозамена

n=1
word = "@"
o = open("out.txt","a") #open for append
for line in open("in.txt"):
    line = line.replace(word,str(n))
    if word in line:
        n=n+1
    o.write(line + "\n") 
o.close()
или так:
def f(f_in, f_out, word):
	count = 0
	with open(f_in) as fin, open(f_out, 'w') as fout:
		for line in fin.readlines():
			if word in line:
				count += 1
				line = line.replace(word, str(count))
			fout.write(line)

Отредактировано botinag (Дек. 16, 2015 09:55:43)

Офлайн

#4 Дек. 16, 2015 10:29:28

py.user.next
От:
Зарегистрирован: 2010-04-29
Сообщения: 10016
Репутация: +  857  -
Профиль   Отправить e-mail  

Автозамена

>>> s = """\
... text@
... text
... text@
... @
... text
... @
... @@
... """
>>> 
>>> import io
>>> 
>>> fin = io.StringIO(s)
>>> 
>>> out, n = [], 0
>>> for line in fin:
...     tmp = []
...     for c in line:
...         if c == '@':
...             n += 1
...             tmp.append(str(n))
...         else:
...             tmp.append(c)
...     out.append(''.join(tmp))
... 
>>> out
['text1\n', 'text\n', 'text2\n', '3\n', 'text\n', '4\n', '56\n']
>>>



Офлайн

Board footer

Модераторировать

Powered by DjangoBB

Lo-Fi Version