Пожалуйста (как всегда) следуйте общим правилам , укажите любые особые ограничения, покажите, что вы уже пробовали, и спросите, что конкретно вас смущает.
«t» для текстового режима - только Python 3. Кроме того, вы предоставляете диспетчер контекста для выходного файла, но не можете закрыть входной файл, что кажется несогласованным.
Стивен Румбальский
1
@katrielalex: Нет голосов против, я просто не голосовал за. Но давать ответы на домашнее задание - неправильный способ сделать это
BlueRaja - Дэнни Пфлугофт
Не заметил, что это было помечено как "домашнее задание". Я не буду удалять свой ответ, но в будущем буду более осторожен
Гарет Дэвидсон,
21
«Выдача ответов на домашние задания» - крайне глупый комментарий. Если кому-то нужна помощь, помогите им. Не все хотят заниматься своим HW, некоторые действительно хотят чему-то научиться ...
KingMak
5
Мне это нужно было для домашнего задания, и это мне очень
помогло
78
Если вы хотите заменить строки в том же файле, вам, вероятно, придется прочитать его содержимое в локальной переменной, закрыть ее и снова открыть для записи:
В этом примере я использую оператор with , который закрывает файл после завершения withблока - либо обычно, когда завершается выполнение последней команды, либо в виде исключения.
def inplace_change(filename, old_string, new_string):# Safely read the input filename using 'with'with open(filename)as f:
s = f.read()if old_string notin s:print('"{old_string}" not found in {filename}.'.format(**locals()))return# Safely write the changed content, if found in the filewith open(filename,'w')as f:print('Changing "{old_string}" to "{new_string}" in {filename}'.format(**locals()))
s = s.replace(old_string, new_string)
f.write(s)
Стоит упомянуть, что если бы имена файлов были разными, мы могли бы сделать это более элегантно с помощью одного withоператора.
OP упомянул «любые вхождения», что означает, даже если это подстрока, что не будет работать для вашего примера.
Durdu
7
with open('Stud.txt','r')as f:
newlines =[]for line in f.readlines():
newlines.append(line.replace('A','Orange'))with open('Stud.txt','w')as f:for line in newlines:
f.write(line)
from pathlib importPath
file =Path('Stud.txt')
file.write_text(file.read_text().replace('A','Orange'))
Если бы входные и выходные файлы были разными, вы бы использовали две разные переменные для read_textи write_text.
Если вам нужно изменение более сложное, чем простая замена, вы должны присвоить результат read_textпеременной, обработать его и сохранить новое содержимое в другой переменной, а затем сохранить новое содержимое с помощью write_text.
Если ваш файл был большим, вы бы предпочли подход, который не считывает весь файл в памяти, а обрабатывает его построчно, как показано Гаретом Дэвидсоном в другом ответе ( https://stackoverflow.com/a/4128192/3981273 ) , что, конечно же, требует использования двух разных файлов для ввода и вывода.
write_text у меня не работает. Он не обновляет файл
Анураг
0
Самый простой способ - сделать это с помощью регулярных выражений, предполагая, что вы хотите перебирать каждую строку в файле (где будет храниться 'A'), вы делаете ...
import re
input = file('C:\full_path\Stud.txt), 'r')
#when you try and write to a file with write permissions, it clears the file and writes only #what you tell it to the file. So we have to save the file first.
saved_input
for eachLine in input:
saved_input.append(eachLine)
#now we change entries with 'A' to 'Orange'
for i in range(0, len(old):
search = re.sub('A', 'Orange', saved_input[i])
if search is not None:
saved_input[i] = search
#now we open the file in write mode (clearing it) and writing saved_input back to it
input = file('C:\full_path\Stud.txt),'w')for each in saved_input:
input.write(each)
Ответы:
источник
Если вы хотите заменить строки в том же файле, вам, вероятно, придется прочитать его содержимое в локальной переменной, закрыть ее и снова открыть для записи:
В этом примере я использую оператор with , который закрывает файл после завершения
with
блока - либо обычно, когда завершается выполнение последней команды, либо в виде исключения.Стоит упомянуть, что если бы имена файлов были разными, мы могли бы сделать это более элегантно с помощью одного
with
оператора.источник
источник
Что-то вроде
источник
источник
Если вы используете Linux и просто хотите заменить слово
dog
на,cat
вы можете:text.txt:
Команда Linux:
Вывод:
Исходное сообщение: /ubuntu/20414/find-and-replace-text-within-a-file-using-commands
источник
Использование pathlib ( https://docs.python.org/3/library/pathlib.html )
Если бы входные и выходные файлы были разными, вы бы использовали две разные переменные для
read_text
иwrite_text
.Если вам нужно изменение более сложное, чем простая замена, вы должны присвоить результат
read_text
переменной, обработать его и сохранить новое содержимое в другой переменной, а затем сохранить новое содержимое с помощьюwrite_text
.Если ваш файл был большим, вы бы предпочли подход, который не считывает весь файл в памяти, а обрабатывает его построчно, как показано Гаретом Дэвидсоном в другом ответе ( https://stackoverflow.com/a/4128192/3981273 ) , что, конечно же, требует использования двух разных файлов для ввода и вывода.
источник
Самый простой способ - сделать это с помощью регулярных выражений, предполагая, что вы хотите перебирать каждую строку в файле (где будет храниться 'A'), вы делаете ...
источник