#define stringify( name ) # name
enum MyEnum {
ENUMVAL1
};
...stuff...
stringify(EnumName::ENUMVAL1); // Returns MyEnum::ENUMVAL1
Я предполагаю, что что-то вроде этого должно сделать это. Это в основном пишет содержание в новый файл и заменяет старый файл новым файлом:
from tempfile import mkstemp
from shutil import move
from os import fdopen, remove
def replace(file_path, pattern, subst):
#Create temp file
fh, abs_path = mkstemp()
with fdopen(fh,'w') as new_file:
with open(file_path) as old_file:
for line in old_file:
new_file.write(line.replace(pattern, subst))
#Remove original file
remove(file_path)
#Move new file
move(abs_path, file_path)
Самый короткий путь состоял бы в том, чтобы, вероятно, использовать fileinput модуль . Например, следующее добавляет номера строки к файлу, оперативному:
import fileinput
for line in fileinput.input("test.txt", inplace=True):
print "%d: %s" % (fileinput.filelineno(), line),
, Что происходит, вот:
print
, операторы записывают обратно в исходный файл fileinput
, имеет больше дополнительных свойств. Например, это может использоваться для автоматической работы на все файлы в sys.args[1:]
без того, что вы имели необходимость выполнить итерации по ним явно. При запуске с Python 3.2 это также предоставляет удобному менеджеру по контексту для использования в with
оператор.
, В то время как fileinput
является большим для холостых сценариев, я опасался бы использовать его в реальном коде, потому что по общему признанию это не очень читаемо или знакомо. В реальном (производство) кодируют, стоит потратить еще всего несколько строк кода, чтобы сделать процесс явным и таким образом сделать код читаемым.
существует две опции:
Вот другой пример, который был протестирован и будет соответствовать поиску & шаблоны замены:
import fileinput
import sys
def replaceAll(file,searchExp,replaceExp):
for line in fileinput.input(file, inplace=1):
if searchExp in line:
line = line.replace(searchExp,replaceExp)
sys.stdout.write(line)
использование В качестве примера:
replaceAll("/fooBar.txt","Hello\sWorld!$","Goodbye\sWorld.")
Как lassevk предполагает, выпишите новый файл, когда Вы идете, вот некоторый пример кода:
fin = open("a.txt")
fout = open("b.txt", "wt")
for line in fin:
fout.write( line.replace('foo', 'bar') )
fin.close()
fout.close()
Создайте новый файл, скопируйте строки от старого до нового, и сделайте замену перед записью строк в новый файл.
fileinput
довольно просто, как упомянуто на предыдущих ответах:
import fileinput
def replace_in_file(file_path, search_text, new_text):
with fileinput.input(file_path, inplace=True) as f:
for line in f:
new_line = line.replace(search_text, new_text)
print(new_line, end='')
Объяснение:
fileinput
может принять несколько файлов, но я предпочитаю закрывать каждый единственный файл, как только он обрабатывается. Так поместил единственный file_path
в with
оператор. print
оператор ничего не печатает, когда inplace=True
, потому что STDOUT
передается исходному файлу. end=''
в [1 110] оператор должен устранить промежуточные пустые новые строки. Может использоваться следующим образом:
file_path = '/path/to/my/file'
replace_in_file(file_path, 'old-text', 'new-text')
Это должно работать: (редактирование на месте)
import fileinput
# Does a list of files, and
# redirects STDOUT to the file in question
for line in fileinput.input(files, inplace = 1):
print line.replace("foo", "bar"),