Одно решение:
for (column.name in names(tbl_data) [3:ncol(tbl_data)]) {
tbl_data[column.name] = tbl_data[column.name] / tbl_data$Col
}
Это должно сделать это
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()
Я мог бы рассмотреть возможность использования 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
в том, что оно немного более устойчиво к перекрывающимся совпадениям.
Быстрее было бы написать ...
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
Это исключило множество итераций, предлагаемых другими ответами, и ускорит процесс для более длинных файлов.
Это короткий и простой пример, который я только что использовал:
Если:
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