2017-04-09 17 views
2

Ich habe eine Liste von Zeichenfolgen in einer Textdatei. Die Saiten sind Morgen, Nacht, Sonne, Mond. Was ich versuche, ist, eine dieser Zeichenfolgen durch eine andere Zeichenfolge zu ersetzen. Zum Beispiel würde ich morgens eingeben, um es zu entfernen und durch Nachmittag zu ersetzen. Ich bekomme einen Fehler, der "builtins.ValueError: list.remove (x): x nicht in der Liste" sagt, wenn der String eindeutig in der Liste ist.Zeichenfolge in einer Datei durch eine neue Zeichenfolge ersetzen

Wenn es einen besseren Weg gibt, die gleichen Ergebnisse zu erzielen, wenn man es anders macht, lassen Sie es mich wissen. Danke für die Hilfe!

+0

Sie meinen, bearbeiten Sie die Datei an Ort und Stelle, ohne eine andere zu erstellen? –

+2

Bitte nennen Sie niemals Ihre Variablen 'list', weil' list() 'eine eingebaute Funktion ist. Zweitens haben Ihre Strings in 'list' Zeilenumbrüche' \ n'' am Ende. Sie sollten sie vor dem Entfernen entfernen. – DyZ

Antwort

1

Hier sind einige Ideen:

  • Die str.replace() Funktion der einfachste Weg ist, Strings zu ersetzen, s.replace(y, z).

  • Mit der Funktion re.sub() können Sie nach Mustern suchen und durch Zeichenfolgen ersetzen: re.sub(y, z, s).

  • Mit dem Modul fileinput können Sie Änderungen direkt vornehmen.

Hier ist eine Möglichkeit, es zu tun:

import fileinput 
import re 

with fileinput.input(files=('file1.txt', 'file2.txt'), inplace=True) as f: 
    for line in f: 
     print(re.sub(y, z, line)) 

Hier ist eine andere Idee:

  • Statt Verarbeitung line-by-line, lesen Sie einfach die gesamte Datei in als einzelne Zeichenfolge repariere es und schreibe es zurück.

Zum Beispiel:

import re 

with open(filename) as f: 
    s = f.read() 
with open(filename, 'w') as f: 
    s = re.sub(y, z, s) 
    f.write(s) 
-1

Vielleicht suchen Sie für die Python replace() Methode?

str = file.readlines() 
str = str.replace(y, z) #this will replace substring y with z within the parent String str 
0

Angenommen, Ihre txt speichern in src.txt:

morning 
night 
sun 
moon 

In Windows können Sie das Batch-Skript verwenden, speichern in replace.bat:

@echo off 
setlocal enabledelayedexpansion 
set filename=%1 
set oldstr=%2 
set newstr=%3 

for /f "usebackq" %%i in (%filename%) do (
    set str=%%i 
    set replace=!str:%oldstr%=%newstr%! 
    echo !replace! 
) 

Verbrauch:

replace.bat src.txt morning afternoon > newsrc.txt 

oder grepWin.

Verwenden Sie sed oder gawk kann einfacher sein.

sed -i "s/morning/afternoon/g" src.txt 
Verwandte Themen