Seite 1 von 1

Wie kann ich Zeile einfügen an einem bestimmten Position

Verfasst: Donnerstag 19. April 2007, 16:02
von powerpython
Hallo, Hilfe!!
Ich möchte z.B in einer Datei eine Zeile zwischen Zeile 3 und Zeile 4 einfügen, wie kann ich am besten vorgehen.
Der erste Idee ist, ich zerlege diese Datei in 2 Dateien und füge ich eine Zeile in Datei 1, und füge ich die beiden Dateien wieder zusammen.
Kann jmd mir an dieser Stelle hilfen, oder weiß jmd, wie man ohne die Datei zu zerlegen direkt Zeile einfügen kann.

Verfasst: Donnerstag 19. April 2007, 17:04
von BlackJack
Direkt einfügen geht nicht weil die einzelnen Bytes nacheinander in der Datei liegen. Man müsste ja alles nach der eingefügten Zeile nach "hinten" verschieben.

Wenn die Datei nicht zu gross ist kann man sie komplett in eine Liste mit Zeilen einlesen, die neue Zeile in diese Liste einfügen und dann die Zeilen wieder in die Datei schreiben.

Ansonsten muss man zwei Dateien benutzen. Erst alle Zeilen bis zum Einfügepunkt in eine neue Datei kopieren, dann die neue Zeile in diese Datei schreiben und dann die restlichen Zeilen hinterherkopieren. Zum Schluss benennt man die Datei noch zur Ursprungsdatei um.

Verfasst: Freitag 20. April 2007, 09:34
von powerpython
Ich bin ein absoluter Pythonanfänger und weiß nicht, wie ich das ganze schreiben kann, kannst du mal paar code schreiben, vielen Dank![/code]

Verfasst: Freitag 20. April 2007, 09:44
von gerold
powerpython hat geschrieben:Ich bin ein absoluter Pythonanfänger
Hi powerpython!

Ich weiß, dass ich fies bin. :twisted:
Wenn du dir das http://www.python-forum.de/topic-6157.html durchgelesen hast, dann helfe ich dir weiter. ;-)

mfg
Gerold
:-)

Verfasst: Freitag 20. April 2007, 09:57
von gerold

Code: Alles auswählen

#!/usr/bin/env python
# -*- coding: iso-8859-15 -*-

FILENAME = "testdatei.txt"


def create_file(filename):
    """
    Erstellt die Testdatei mit Text
    """
    
    # Textzeilen (\n steht für einen Zeilenumbruch)
    lines = [
        "Ich bin Zeile 1\n",
        "Ich bin Zeile 2\n",
        "Ich bin Zeile 3\n",
    ]
    
    # Datei zum Schreiben öffnen und Zeilen hineinschreiben
    f = file(filename, "w")
    f.writelines(lines)
    f.close()


def insert_line(filename, insert_pos, line):
    """
    Fügt der angegebenen Datei oberhalb der angegebenen Position die
    Zeile hinzu. Diese Funktion sollte nicht für große Dateien (50 MB)
    verwendet werden.
    """
    
    # Datei zum Lesen öffnen und alle Zeilen in eine Liste einlesen
    f = file(filename, "rU")
    lines = f.readlines()
    f.close()
    
    # Wenn die Zeile nicht mit einem Zeilenumbruch endet, dann wird dieser
    # hinzugefügt.
    if not line.endswith("\n"):
        line += "\n"
    
    # Der Liste die neue Zeile hinzufügen
    lines.insert(insert_pos, line)
    
    # Speichern
    f = file(filename, "w")
    f.writelines(lines)
    f.close()


def main():
    create_file(FILENAME)
    insert_line(FILENAME, 1, "Ich bin gekommen um zu bleiben.")


if __name__ == "__main__":
    main()
mfg
Gerold
:-)

Verfasst: Freitag 20. April 2007, 10:52
von N317V
:roll:

Verfasst: Freitag 20. April 2007, 11:23
von gerold
N317V hat geschrieben::roll:
Hi N317V!

Wie glaubst du, kann man jemandem guten Programmierstil beibringen? Mit abstrakten Erklärungen oder mit guten Beispielen?

Wir sind anderer Meinung darüber und es bringt nichts, einen alten Hasen, der schon vor über zehn Jahren im WIFI unterrichtet hat, davon abbringen zu wollen. Im Physik-Unterricht wollen wir praktische Beispiele. Im Mathematik-Unterricht wollen wir praktische Beispiele. Warum soll das in der Programmierung anders sein. Alle jammern, dass zu wenig Beispiele in der Python-Dokumentation sind. Und du und evt. noch ein paar andere glauben, dass jemandem mehr geholfen ist, wenn man ihm nur ein paar abstrakte Hinweise vor die Füße schmeißt. -- Ich nicht!

Falls das zu einer Grundsatzdiskussion ausartet, müssen wir die Beiträge von dem Originalthema abtrennen.

lg
Gerold
:-)

Verfasst: Freitag 20. April 2007, 11:50
von BlackJack
Ich will's nicht in eine Grundsatzdiskussion ausarten lassen, aber vom OP gibt's noch einen anderen Beitrag und beide zusammen lassen die Vermutung zu, dass Du ihm gerade einen Teil seiner Hausaufgabe gelöst hast. ;-)

Verfasst: Freitag 20. April 2007, 12:03
von gerold
BlackJack hat geschrieben:beide zusammen lassen die Vermutung zu, dass Du ihm gerade einen Teil seiner Hausaufgabe gelöst hast. ;-)
Ups!

:oops: :roll:

Das wollte ich nicht!

lg
Gerold
:-)

Verfasst: Freitag 20. April 2007, 12:35
von N317V
Im Übrigen hätte die Suchfunktion mindestens einen Thread zu diesem Thema zu Tage befördert. Und zwar einen, in dem der Fragende auch seine eigenen Versuche in Form von Quelltext postet.