На месте замены текста в файле на Python

Я использую следующий код для загрузки файла на сервере с помощью FTP после его редактирования:

import fileinput file = open('example.php','rb+') for line in fileinput.input('example.php'): if 'Original' in line : file.write( line.replace('Original', 'Replacement')) file.close() 

Есть одна вещь, вместо того, чтобы заменить текст в исходном месте, код добавляет замененный текст в конец, а текст в исходном месте не изменяется.

Кроме того, вместо просто замененного текста он печатает всю строку. Может ли кто-нибудь рассказать мне, как разрешить эти две ошибки?

  • как скоро вызывается `__del__` после того, как счетчик ссылок падает до нуля?
  • Почему str.count ('') и len (str) дают разные результаты?
  • Заполнение словаря из списка
  • Как умножить список текста на список целых чисел и получить один длинный список текста?
  • python3 - поведение супер () при многоуровневом
  • истощенные итераторы - что с ними делать?
  • Являются ли классные объекты одиночными?
  • Получение карты () для возврата списка в Python 3.x
  • 3 Solutions collect form web for “На месте замены текста в файле на Python”

    1) Код добавляет замененный текст в конце, а текст в оригинальном месте не изменяется.

    Вы не можете заменить его в теле файла, потому что вы открываете его с помощью сигнала + . Таким образом, он будет добавлен в конец файла.

     file = open('example.php','rb+') 

    Но это работает только в том случае, если вы хотите добавить конец документа.

    Чтобы обойти это, вы можете использовать seek() для перехода к определенной строке и ее замены. Или создайте 2 файла: файл input_file и output_file .


    2) Кроме того, вместо просто замененного текста он печатает всю строку.

    Это потому, что вы используете:

     file.write( line.replace('Original', 'Replacement')) 

    Бесплатный код:

    Я разделился на 2 файла, файл ввода и выходной файл.

    Сначала он откроет ifile и сохранит все строки в списке, называемом lines .

    Во-вторых, он будет читать все эти строки, и если 'Original' присутствует, он replace его.

    После замены он сэкономит ofile .

     ifile = 'example.php' ofile = 'example_edited.php' with open(ifile, 'rb') as f: lines = f.readlines() with open(ofile, 'wb') as g: for line in lines: if 'Original' in line: g.write(line.replace('Original', 'Replacement')) 

    Затем, если вы хотите, вы можете os.remove() не отредактированный файл с:


    Дополнительная информация: Tutorials Point: Python Files I / O

    Вторая ошибка заключается в том, как работает метод replace() .

    Он возвращает всю входную строку с заменой только указанной подстроки. См. Пример здесь .

    Чтобы записать в определенное место в файле, сначала нужно seek() в нужное положение.

    Я думаю, что эта проблема была задана раньше в нескольких местах, я бы сделал быстрый поиск StackOverflow.

    Может быть, это поможет?

    Замена материала в файле работает только хорошо, если оригинал и замена имеют одинаковый размер (в байтах), тогда вы можете сделать

     with open('example.php','rb+') as f: pos=f.tell() line=f.readline() if b'Original' in line: f.seek(pos) f.write(line.replace(b'Original',b'Replacement')) 

    (В этом случае b'Original' и b'Replacement' не имеют одинакового размера, поэтому после этого ваш файл будет выглядеть смешно)

    Редактировать:

    Если оригинал и замена не имеют одинаковый размер, существуют различные возможности, такие как добавление байтов для заполнения отверстия или перемещение всего после строки.

    Python - лучший язык программирования в мире.