У меня есть небольшая проблема с Python. Вот код:Python 3 Заменить строки
f = open('/path/to/file', 'r')
filedata = f.read()
f.close()
postgres = filedata.replace('# DBENGINE=MYSQL', 'DBENGINE=PGSQL')
dbname = filedata.replace('# DBNAME=DB1', 'DBNAME=DB1')
dbrwuser = filedata.replace('# DBRWUSER="user1"', 'DBRWUSER="user1"')
f = open('/path/to/file', 'w')
f.write(postgres)
f.write(dbname)
f.write(dbrwuser)
f.close()
Как вы можете видеть, что я пытаюсь прочитать большой файл, и когда я пытаюсь заменить его он просто заменяет «Postgres», и это не делает изменения «DbName, dbrwuser» и т.д. Поэтому я попытался понять это, но не мог этого сделать.
Любая идея или образец?
Спасибо.
Избегайте 'f.read()' для больших файлов. Он считывает весь файл в память. 'with open (filename) как f: для строки в f: ...' обычно лучше, поскольку он читает одну строку за раз. 'string.replace()' возвращает всю строку с первым аргументом, замененным вторым. Это означает, что переменные 'postgres',' dbname' и 'dbrwuser' содержат всю копию всего файла с заменой только указанных строк. То есть 'dbrwuser' все еще имеет' # DBENGINE = MYSQL', а 'postgres' все еще имеет' '# DBRWUSER =" user1 "'. Кроме того, опция 'w' в' f = open() 'будет перезаписывать файл каждый раз. – jDo
@jДа ничего себе, звучит, как я испортил. Должен ли я исправить как «с открытым (имя файла) ....? Каков наилучший способ? –
Я включил комментарии в ответ и добавил некоторые подробности. Не стесняйтесь спрашивать, не кажется ли что-то непонятным. – jDo