Как заменить строку в файле python
Перейти к содержимому

Как заменить строку в файле python

  • автор:

Как заменить строчку в .txt файле через python 3?

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

Отслеживать
52.4k 11 11 золотых знаков 110 110 серебряных знаков 312 312 бронзовых знаков
задан 15 апр 2017 в 18:28
131 1 1 золотой знак 1 1 серебряный знак 2 2 бронзовых знака
Связанные вопросы: Замена файле слов, Python Заменить слово в файле
15 апр 2017 в 19:50
15 апр 2017 в 21:08
Если вам дан исчерпывающий ответ, отметьте его как верный (галка напротив выбранного ответа).
17 апр 2017 в 5:47

4 ответа 4

Сортировка: Сброс на вариант по умолчанию

Замену можно сделать так:

with open ('test.txt', 'r') as f: old_data = f.read() new_data = old_data.replace('что_меняем', 'на_что_меняем') with open ('test.txt', 'w') as f: f.write(new_data) 

Отслеживать
ответ дан 15 апр 2017 в 19:54
590 2 2 серебряных знака 12 12 бронзовых знаков
Спасибо большое, то что нужно )
15 апр 2017 в 20:18
path = pathlib.Path(‘test.txt’); path.write_text(path.read_text().replace(‘old’, ‘new’))
19 мар 2018 в 8:42

Открыть файл на чтение можно либо так

file = open('filename.txt', 'r') firstline = file.readlines()[0].strip() file.close() 
with open('filename.txt', 'r') as f: print('first line', f.readlines()[0].strip()) 

Преимущество второго способа в том, что вам не надо закрывать файл вручную. Конструкция with сделает это за вас после закрытия её блока.

Перезаписать файл можно же таким образом:

with open('filename.txt', 'r') as f1, open('filename1.txt', 'w') as f2: f2.write(f1.read()) 

Но так как вы хотите писать файл с заменой строки, то вам нужно воспользоваться перебором по readlines() и либо регулярными выражениями, либо сравнением текущей строки с той, которую вы ищите (если у вас есть искомая строка, конечно) и её заменой.

Грубо говоря, вы можете сделать это как-то так:

with open('filename.txt', 'r') as f1, open('filename1.txt', 'w') as f2: lines = f1.readlines() for line in lines: line = line.strip() if line == 'искомая строка': f2.write('новая строка\n') else: f2.write(line) 

Также могут помочь функции startswith() и endswith() , если у вас есть только начало или конец от искомой строки. И помните про регистр!

Также можно не перебирать строки, а обратиться к строке по индексу, если вам известно какой у неё номер, и заменить её содержание.

И можно воспользоваться функцией replace() , как уже написал автор второго ответа, что сократит количество кода, но заменит абсолютно все вхождения. Чтобы этого избежать, при вызове функции можно указать максимальное число совершаемых замен: S.max(sub_in_str, to_change_str, max) .

Также учитывайте, что replace() совершит замену даже если строка частично совпадает. То есть выполнив это:

'This is a simple example'.replace('is', 'was') 

Мы получим Thwas was a simple example

Отслеживать
ответ дан 15 апр 2017 в 19:44
user243273 user243273

Если длина новой строки не совпадает с длиной старой, то придётся переписать весь файл (начиная со строчки, которую вы хотите заменить) даже если вам надо заменить только одну строку в файле (за редкими исключениями). Связанный вопрос: Запись текстовой строки по нужному индексу в файл на языке Си?

Чтобы в случае ошибки сохранить оригинал или для больших файлов (когда всё содержимое в памяти не помещается), может использоваться временный файл куда новое содержимое пишется и в конце в случае успеха он переименовывается в исходное имя файла. Похожий подход использует стандартный модуль fileinput : исходный файл переименовывается (чтобы из него читать текущее содержимое), а стандартный вывод перенаправляется в указанный файл (простой print печатает прямо в файл):

#!/usr/bin/env python3 import fileinput import os with fileinput.FileInput('файл.txt', inplace=True, backup='.bak') as file: for line in file: line = line.rstrip() # remove trailing (invisible) space print('новое' if line == 'старое' else line) # stdout is redirected to the file os.unlink(filename + '.bak') # remove the backup on success 

Можно самостоятельно явно временный файл создать:

#!/usr/bin/env python3 from pathlib import Path from tempfile import NamedTemporaryFile path = Path('файл.txt') with path.open() as file, \ NamedTemporaryFile('w', dir=str(path.parent), delete=False) as output_file: for line in file: line = line.rstrip() print('новое' if line == 'старое' else line, file=output_file) Path(output_file.name).replace(path) # replace the input file on success 

Отличие в том, что оригинальное содержимое хранится в .bak файле в fileinput подходе, а в коде с NamedTemporaryFile исходный файл заменяется только в случае успеха (в отсутствие исключений).

Небольшой файл можно в память целиком загрузить, чтобы получить список строк, изменить нужные и целиком перезаписать этот файл, рискуя потерять данные, если ошибка возникнет при записи (аналогично коду в @stxdtm ответе):

#!/usr/bin/env python3 filename = 'файл.txt' with open(filename) as file: lines = ['новое\n' if line.rstrip() == 'старое' else line for line in file] with open(filename, 'w') as file: file.writelines(lines) 

Подробнее представленные подходы можно по ссылкам в похожем ответе посмотреть.

Если длина новой строки совпадает с длиной старой (в байтах), то можно прямо по месту изменения делать, не переписывая другие части файла, к примеру, используя mmap модуль, который позволяет файл рассматривать и как файл ( .readline() , etc), и как байтовую строку ( .find() , можно применять регулярные выражения). Связанный вопрос: Python — How can I change bytes in a file.

�� Как заменить строчку в txt файле через python 3 | Подробная инструкция

Чтобы заменить строку в текстовом файле с помощью Python 3, вам потребуется открыть файл, прочитать его содержимое, выполнить замену и записать изменения обратно в файл. Вот простой пример кода:

 filename = "example.txt" # замените на имя вашего файла search_string = "старая строка" # замените на строку, которую вы хотите заменить replace_string = "новая строка" # замените на строку, на которую вы хотите заменить # Открыть файл в режиме чтения и записи with open(filename, 'r') as file: # Прочитать содержимое файла content = file.read() # Выполнить замену строки content = content.replace(search_string, replace_string) # Открыть файл в режиме записи и записать изменения with open(filename, 'w') as file: file.write(content) 

В этом примере мы открываем файл с помощью оператора with , который автоматически закрывает файл после использования. Затем мы читаем содержимое файла в переменную content , используя метод read() . После этого мы выполняем замену строки с помощью метода replace() . Наконец, мы открываем файл в режиме записи и записываем изменения с помощью метода write() . Убедитесь, что заменяемая строка точно соответствует содержимому файла, иначе замена не произойдет. Также обратите внимание, что этот пример заменяет только первое вхождение строки, если таковое имеется.

Детальный ответ

Как заменить строчку в txt файле через Python 3

Python предлагает множество инструментов для работы с текстовыми файлами. Если вам нужно заменить определенную строчку в файле, вы можете использовать некоторые из этих инструментов для достижения своей цели. В этой статье мы рассмотрим несколько подходов, которые вы можете использовать для замены строчки в текстовом файле с помощью Python 3.

Метод 1: Замена строчки с помощью чтения и записи

Первый подход, который мы рассмотрим, заключается в том, чтобы прочитать содержимое файла, заменить необходимую строчку и записать измененное содержимое обратно в файл. Давайте рассмотрим пример:

 def replace_line(file_name, line_number, new_line): lines = [] # Чтение содержимого файла with open(file_name, 'r') as file: lines = file.readlines() # Замена строчки lines[line_number - 1] = new_line + '\n' # Запись измененного содержимого обратно в файл with open(file_name, 'w') as file: file.writelines(lines) 

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

Метод 2: Замена строчки с помощью модуля fileinput

Второй подход, который мы рассмотрим, использует модуль fileinput. Этот модуль обеспечивает удобный способ замены строк в файле. Вот пример:

 import fileinput def replace_line(file_name, line_number, new_line): for line in fileinput.input(file_name, inplace=True): if fileinput.lineno() == line_number: print(new_line) else: print(line.rstrip()) 

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

Метод 3: Замена строчки с использованием регулярных выражений

Использование регулярных выражений также может быть полезным при замене строчки в текстовом файле. Вы можете использовать модуль re для выполнения этой задачи. Рассмотрим пример:

 import re def replace_line(file_name, line_number, new_line): lines = [] # Чтение содержимого файла with open(file_name, 'r') as file: lines = file.readlines() # Замена строчки с помощью регулярного выражения pattern = re.compile(r'^.*$', re.MULTILINE) lines[line_number - 1] = re.sub(pattern, new_line + '\n', lines[line_number - 1]) # Запись измененного содержимого обратно в файл with open(file_name, 'w') as file: file.writelines(lines) 

Функция replace_line, которую мы использовали в примере выше, принимает имя файла, номер строчки и новую строчку в качестве аргументов. Здесь мы использовали регулярное выражение для замены нужной строчки в файле. В этом примере измененные данные также записываются обратно в файл.

Заключение

Теперь у вас есть несколько методов замены строчки в текстовом файле с помощью Python 3. Вы можете выбрать наиболее подходящий вариант в зависимости от ваших потребностей. Используя функции и модули, описанные выше, вы сможете эффективно заменить строчку в текстовом файле, сохраняя структуру и форматирование данных.

How to Replace String in File Using Python

How to Replace String in File Using Python

  1. Use the replace() Function When Input and Output Files Are Different
  2. Use the replace() Function When Only One File Is Used for Input and Output

File handling is an essential aspect of any web application. Python, similar to other programming languages, supports file handling. It allows the programmers to deal with files and essentially perform some basic operations like reading, writing, and some other file handling options to operate on files.

The open() function can be used to open a file in the Python program. The file can be opened in either text or binary mode which is decided by the user. The open() function has several modes, all of which provide different accessibility options for the file to be opened in.

The term string in Python can be described as a cluster of Unicode characters enclosed within single or double quotes. Strings can be contained inside the text files that are to be opened in the Python code.

This tutorial will discuss different methods to replace a string in a file in Python.

Use the replace() Function When Input and Output Files Are Different

The replace() method in Python is utilized to search for a sub-string and replace it with another sub-string.

The replace() function has three parameters, namely oldvalue , newvalue , and count . Both oldvalue and newvalue are required values, and providing the function with the count parameter is optional.

The following code uses the replace() function to replace a string in Python when input and output files are different.

# the input file fin = open("f1.txt", "rt") # the output file which stores result fout = open("f2.txt", "wt") # iteration for each line in the input file for line in fin:  # replacing the string and write to output file  fout.write(line.replace("gode", "God")) # closing the input and output files fin.close() fout.close() 

In the output of the above code, the string gode in the file will be replaced by the word God .

In the above code, we simultaneously work on two different files, f1.txt and f2.txt . f1.txt is opened in the read text rt mode and is referenced to fin . f2.txt is opened in the write text wt mode and is referenced to fout . Then the for loop is iterated, and for every occurrence of the string gode in the file, it gets replaced by the word God . Both the files are then closed after the necessary operations with the help of the close() function.

Use the replace() Function When Only One File Is Used for Input and Output

In this method, the same file is used as both input and output.

We use the with statement here along with the replace() function. The with context manager has a fundamental function: making the program shorter and much more readable.

When we use the with statement with File handling, the file that we opened in the Python code doesn’t need to be manually closed; it automatically closes after the with block terminates.

The following code uses the replace() function to replace a string in Python when the input and output file is the same.

with open("file1.txt", "rt") as file:  x = file.read()  with open("file1.txt", "wt") as file:  x = x.replace("gode", "God")  fin.write(x) 

The following code takes file1 as both the input and output file. Firstly, the file is opened in the read text rt mode, and the contents of the file are read and stored in a variable. Then, the file is closed and opened again, but in the write text mode wt this time. The string is replaced, and the data is written in this mode, and then the file is closed.

Vaibhhav is an IT professional who has a strong-hold in Python programming and various projects under his belt. He has an eagerness to discover new things and is a quick learner.

Related Article — Python File

  • How to Get All the Files of a Directory
  • How to Append Text to a File in Python
  • How to Check if a File Exists in Python
  • How to Find Files With a Certain Extension Only in Python
  • How to Read Specific Lines From a File in Python
  • How to Check if File Is Empty in Python

Related Article — Python String

  • How to Remove Commas From String in Python
  • How to Check a String Is Empty in a Pythonic Way
  • How to Convert a String to Variable Name in Python
  • How to Remove Whitespace From a String in Python
  • How to Extract Numbers From a String in Python
  • How to Convert String to Datetime in Python

Copyright © 2024. All right reserved

���� Как заменить строку в файле Python: подробное руководство и примеры кода

Вышеуказанный код открывает файл, читает его содержимое, заменяет старую строку на новую в переменной «content» и записывает измененное содержимое обратно в файл.

Детальный ответ

Как заменить строку в файле python

В этой статье мы рассмотрим, как заменить конкретную строку в файле, используя Python.

Открытие файла

Первым шагом нам нужно открыть файл с помощью функции open():

 file_path = 'путь_к_файлу.txt' with open(file_path, 'r') as file: # Код для замены строки 

Здесь мы указываем путь к файлу в переменной file_path . Затем мы открываем файл в режиме чтения (‘r’) с помощью ключевого слова with . Использование with гарантирует, что файл будет закрыт после его использования, даже если возникнут ошибки.

Чтение содержимого файла

Далее мы должны прочитать содержимое файла. Это можно сделать с помощью метода readlines() или с помощью цикла:

Метод readlines() :
 file_contents = file.readlines() 
Цикл для чтения каждой строки:
 file_contents = [] for line in file: file_contents.append(line) 

Используйте один из этих методов для сохранения содержимого файла в переменной file_contents .

Замена строки

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

 for i in range(len(file_contents)): if 'искомая строка' in file_contents[i]: file_contents[i] = 'новая строка\n' 

В этом примере мы использовали цикл for , чтобы пройти по каждому элементу списка file_contents . Мы проверяем, содержит ли текущая строка искомую строку, и если да, заменяем ее на новую строку. Обратите внимание, что мы добавили символ новой строки ‘\n’ в конец новой строки. Это необходимо, чтобы сохранить форматирование файла.

Запись изменений в файл

Последний шаг — записать внесенные изменения обратно в файл:

 with open(file_path, 'w') as file: file.writelines(file_contents) 

Мы открываем файл в режиме записи (‘w’) и с помощью метода writelines() записываем все строки из списка file_contents обратно в файл.

Полный пример кода

 file_path = 'путь_к_файлу.txt' with open(file_path, 'r') as file: file_contents = file.readlines() for i in range(len(file_contents)): if 'искомая строка' in file_contents[i]: file_contents[i] = 'новая строка\n' with open(file_path, 'w') as file: file.writelines(file_contents) 

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

Итог

В этой статье мы рассмотрели, как заменить строку в файле с помощью Python. Мы познакомились с различными шагами, такими как открытие файла, чтение его содержимого, замена строки и запись изменений обратно в файл. Теперь вы можете использовать эти знания для успешной замены строк в ваших Python-приложениях.

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *