Wie füge ich eine neue Zeile vor der ersten Zeile in eine Datei mit python ein?

Weitere Details unten:

1st line 2nd line 3rd line 4th line ... 

Nun möchte nun eine neue Zeile mit der Nummer zero line vor der 1st line . Datei sieht wie folgt aus:

 zero line 1st line 2nd line 3rd line 4th line ... 

Ich weiß, sed Befehl kann diese Arbeit zu tun, aber wie man es mit Python tun? Vielen Dank

4 Solutions collect form web for “Wie füge ich eine neue Zeile vor der ersten Zeile in eine Datei mit python ein?”

Du kannst fileinput

 >>> import fileinput >>> for linenum,line in enumerate( fileinput.FileInput("file",inplace=1) ): ... if linenum==0 : ... print "new line" ... print line.rstrip() ... else: ... print line.rstrip() ... 

Das könnte interessant sein

http://net4geeks.com/index.php?option=com_content&task=view&id=53&Itemid=11

An Ihre Frage angepasst:

 # read the current contents of the file f = open('filename') text = f.read() f.close() # open the file again for writing f = open('filename', 'w') f.write("zero line\n\n") # write the original contents f.write(text) f.close() 
  • Öffnen Sie die Datei und lesen Sie den Inhalt in 'Text'.

  • Schließen Sie die Datei

  • Wiederholen Sie die Datei mit Argument 'w' zu schreiben

  • Schreiben Sie Text, um der Datei vorzugehen

  • Schreiben Sie den Originalinhalt der Datei in die Datei

  • Datei schließen

Lesen Sie die Warnungen im Link.

bearbeiten:

Aber beachten Sie, dass dies nicht ganz sicher ist, wenn Ihre Python-Sitzung nach dem Öffnen der Datei zum zweiten Mal abstürzt und bevor Sie sie wieder schließen, verlieren Sie Daten.

Hier ist eine Implementierung, die einige Mängel in anderen Ansätzen, die so weit dargestellt werden, behebt:

  • Es verliert keine Daten im Falle eines Fehlers – @ kriegar's Version tut
  • Unterstützt leere Dateien – fileinput version nicht
  • Bewahrt die ursprünglichen Daten: fileinput nicht den hinteren Whitespace – fileinput version tut
  • Und liest nicht die ganze Datei im Speicher als die Version von net4geeks.com tut.

Es imitiert die fileinput :

 import os def prepend(filename, data, bufsize=1<<15): # backup the file backupname = filename + os.extsep+'bak' try: os.unlink(backupname) # remove previous backup if it exists except OSError: pass os.rename(filename, backupname) # open input/output files, note: outputfile's permissions lost with open(backupname) as inputfile, open(filename, 'w') as outputfile: # prepend outputfile.write(data) # copy the rest buf = inputfile.read(bufsize) while buf: outputfile.write(buf) buf = inputfile.read(bufsize) # remove backup on success try: os.unlink(backupname) except OSError: pass prepend('file', '0 line\n') 

Sie können cat Dienstprogramm verwenden, wenn es verfügbar ist, um die Dateien zu kopieren. Es könnte effizienter sein:

 import os from subprocess import PIPE, Popen def prepend_cat(filename, data, bufsize=1<<15): # backup the file backupname = filename + os.extsep+'bak' try: os.unlink(backupname) except OSError: pass os.rename(filename, backupname) # $ echo $data | cat - $backupname > $filename with open(filename, 'w') as outputfile: #note: outputfile's permissions lost p = Popen(['cat', '-', backupname], stdin=PIPE, stdout=outputfile) p.communicate(data) # remove backup on success if p.poll() == 0: try: os.unlink(backupname) except OSError: pass prepend_cat('file', '0 line\n') 

Code

 L = list() f = open('text2.txt', 'r') for line in f.readlines(): L.append(line) L.insert(0,"Zero\n") f.close() fi = open('text2.txt', 'w') for line in xrange(len(L)): fi.write(L[line]) fi.close() 

Text2.txt

 Hello The second line 3 4 5 6 

Ausgabe

 Zero Hello The second line 3 4 5 6 

Dies kann Speicher sein, der schwer und zeitaufwendig für große Dateien ist.

Wenn Sie sich Sorgen um etwas wie 31. Linie, würde ich nur ein Mod% 10 auf der Num, um eine genauere Version zu bekommen.

Lassen Sie mich wissen, ob dies hilft, oder wenn Sie eine bessere Version wollen. Auch wenn du eine bessere Formatierung wünschst, schau nach Belieben und rangiere nach links und rechts rechtfertigen.

  • Konvertieren eines Wörterbuchs in das Nummerierungsformat
  • Wx.TextCtrl.LoadFile ()
  • IOError beim Schreiben in Datei in Python
  • Das Importieren einer Textdatei gibt Fehler
  • Bearbeiten Sie die Konfigurationsdatei durch python
  • "Listenindex außerhalb des zulässigen Bereichs", wenn man versucht, Zeilen aus einer Textdatei mit python auszutragen
  • Lesen Fortran direkten Zugang Daten und schriftlich formatierten Daten - schneller mit Python als mit Fortran?
  • Python: schreibt nur die letzte Ausgabe
  • Python ist die beste Programmiersprache der Welt.