Wie kann ich eine Datei, Stud.txt, öffnen und dann alle Vorkommen von "A" durch "Orange" ersetzen?
Wie kann ich eine Datei, Stud.txt, öffnen und dann alle Vorkommen von "A" durch "Orange" ersetzen?
Antworten:
with open("Stud.txt", "rt") as fin:
with open("out.txt", "wt") as fout:
for line in fin:
fout.write(line.replace('A', 'Orange'))
Wenn Sie die Zeichenfolgen in derselben Datei ersetzen möchten, müssen Sie den Inhalt wahrscheinlich in eine lokale Variable einlesen, schließen und zum Schreiben erneut öffnen:
In diesem Beispiel verwende ich die with-Anweisung , die die Datei schließt, nachdem der with
Block beendet wurde - entweder normalerweise, wenn der letzte Befehl ausgeführt wurde, oder durch eine Ausnahme.
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 not in s:
print('"{old_string}" not found in {filename}.'.format(**locals()))
return
# Safely write the changed content, if found in the file
with 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)
Es ist erwähnenswert, dass wir dies mit einer einzigen with
Aussage eleganter hätten tun können, wenn die Dateinamen unterschiedlich gewesen wären .
#!/usr/bin/python
with open(FileName) as f:
newText=f.read().replace('A', 'Orange')
with open(FileName, "w") as f:
f.write(newText)
Etwas wie
file = open('Stud.txt')
contents = file.read()
replaced_contents = contents.replace('A', 'Orange')
<do stuff with the result>
Wenn Sie unter Linux arbeiten und nur das Wort dog
durch ersetzen möchten, cat
können Sie Folgendes tun:
text.txt:
Hi, i am a dog and dog's are awesome, i love dogs! dog dog dogs!
Linux-Befehl:
sed -i 's/dog/cat/g' test.txt
Ausgabe:
Hi, i am a cat and cat's are awesome, i love cats! cat cat cats!
Ursprünglicher Beitrag: /ubuntu/20414/find-and-replace-text-within-a-file-using-commands
Verwenden von pathlib ( https://docs.python.org/3/library/pathlib.html )
from pathlib import Path
file = Path('Stud.txt')
file.write_text(file.read_text().replace('A', 'Orange'))
Wenn Eingabe- und Ausgabedateien unterschiedlich wären, würden Sie zwei verschiedene Variablen für read_text
und verwenden write_text
.
Wenn Sie eine Änderung wünschen, die komplexer als eine einzelne Ersetzung ist, würden Sie das Ergebnis read_text
einer Variablen zuweisen , es verarbeiten und den neuen Inhalt in einer anderen Variablen speichern und dann den neuen Inhalt mit speichern write_text
.
Wenn Ihre Datei groß wäre, würden Sie einen Ansatz bevorzugen, bei dem nicht die gesamte Datei im Speicher gelesen, sondern zeilenweise verarbeitet wird, wie von Gareth Davidson in einer anderen Antwort gezeigt ( https://stackoverflow.com/a/4128192/3981273 ). Dies erfordert natürlich die Verwendung von zwei unterschiedlichen Dateien für die Eingabe und Ausgabe.
Am einfachsten ist es, dies mit regulären Ausdrücken zu tun, vorausgesetzt, Sie möchten über jede Zeile in der Datei (in der 'A' gespeichert ist) iterieren.
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)