11 Stimmen

Hinzufügen von Zeilen nach bestimmter Zeile

Ich versuche, bestimmte Zeilen an einer bestimmten Stelle in meiner Datei hinzuzufügen. Ich benutze dies:

new_file = open("file.txt", "r+")
 for line in new_file:
  if line == "; Include below":
     line = line + "\nIncluded text"
     new_file.write(line)
  else:
     new_file.write(line)

Aber aus irgendeinem Grund verdoppelt sich der Inhalt meiner file.txt.

Bearbeiten: Wenn meine Datei so aussieht:

blablablablablablabal
balablablabalablablbla
include below
blablablablablabalablab
ablablablabalbalablaba

Möchte ich, dass es so aussieht:

blablablablablablabal
balablablabalablablbla
include below
included text
blablablablablabalablab
ablablablabalbalablaba

21voto

afkfurion Punkte 2787

Sie können nicht sicher in eine Datei schreiben, während Sie lesen, es ist besser, die Datei in den Speicher zu lesen, sie zu aktualisieren und wieder in die Datei zu schreiben.

with open("file.txt", "r") as in_file:
    buf = in_file.readlines()

with open("file.txt", "w") as out_file:
    for line in buf:
        if line == "; Include this text\n":
            line = line + "Include below\n"
        out_file.write(line)

2voto

justengel Punkte 5674

Das ist was ich gemacht habe.

def find_append_to_file(filename, find, insert):
    """Text in einer Datei finden und anhängen."""
    with open(filename, 'r+') as file:
        lines = file.read()

        index = repr(lines).find(find) - 1
        if index < 0:
            raise ValueError("Der Text wurde nicht in der Datei gefunden!")

        len_found = len(find) - 1
        old_lines = lines[index + len_found:]

        file.seek(index)
        file.write(insert)
        file.write(old_lines)
# end find_append_to_file

1voto

Verwenden Sie sed:

$ sed '/^include below/aincluded text' < file.txt

Erklärung:

  • /^include below/: passt zu jeder Zeile, die mit include below beginnt
  • a: fügt eine neue Zeile und den folgenden Text hinzu
  • includeed text: der Text, den a hinzufügt

Bearbeiten: Verwenden von Python:

for line in open("file.txt").readlines():
    print(line, end="")
    if line.startswith("include below"):
        print("included text")

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X