замена текста в файле с помощью Python

Одно решение:

for (column.name in names(tbl_data) [3:ncol(tbl_data)]) {
  tbl_data[column.name] = tbl_data[column.name] / tbl_data$Col
}
25
задан shadonar 26 October 2012 в 14:58
поделиться

4 ответа

Это должно сделать это

replacements = {'zero':'0', 'temp':'bob', 'garbage':'nothing'}

with open('path/to/input/file') as infile, open('path/to/output/file', 'w') as outfile:
    for line in infile:
        for src, target in replacements.iteritems():
            line = line.replace(src, target)
        outfile.write(line)

РЕДАКТИРОВАТЬ : Чтобы обратиться к комментарию Eildosa , если вы хотите сделать это без записи в другой файл, то вы ' В конечном итоге вам придется читать весь исходный файл в память:

lines = []
with open('path/to/input/file') as infile:
    for line in infile:
        for src, target in replacements.iteritems():
            line = line.replace(src, target)
        lines.append(line)
with open('path/to/input/file', 'w') as outfile:
    for line in lines:
        outfile.write(line)

Редактировать: Если вы используете Python 3.x, используйте replacements.items() вместо replacements.iteritems()

72
ответ дан jpo38 26 October 2012 в 14:58
поделиться

Я мог бы рассмотреть возможность использования dict и re.sub для чего-то вроде этого:

import re
repldict = {'zero':'0', 'one':'1' ,'temp':'bob','garage':'nothing'}
def replfunc(match):
    return repldict[match.group(0)]

regex = re.compile('|'.join(re.escape(x) for x in repldict))
with open('file.txt') as fin, open('fout.txt','w') as fout:
    for line in fin:
        fout.write(regex.sub(replfunc,line))

Это имеет небольшое преимущество по сравнению с replace в том, что оно немного более устойчиво к перекрывающимся совпадениям.

7
ответ дан sajjadG 26 October 2012 в 14:58
поделиться

Быстрее было бы написать ...

in = open('path/to/input/file').read()
out = open('path/to/input/file', 'w')
replacements = {'zero':'0', 'temp':'bob', 'garbage':'nothing'}
for i in replacements.keys():
    in = in.replace(i, replacements[i])
out.write(in)
out.close

Это исключило множество итераций, предлагаемых другими ответами, и ускорит процесс для более длинных файлов.

2
ответ дан Matt Olan 26 October 2012 в 14:58
поделиться

Это короткий и простой пример, который я только что использовал:

Если:

fp = open("file.txt", "w")

Тогда:

fp.write(line.replace('is', 'now'))
// "This is me" becomes "This now me"

Не:

line.replace('is', 'now')
fp.write(line)
// "This is me" not changed while writing
0
ответ дан AmazingDayToday 26 October 2012 в 14:58
поделиться
Другие вопросы по тегам:

Похожие вопросы: