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

  • Verwenden von np.savetxt und np.loadtxt mit multidimensionalen Arrays
  • F.seek () und f.tell (), um jede Zeile der Textdatei zu lesen
  • Erhalten eines Matlab-Code die Ergebnisse auf Python
  • Bearbeiten Sie die Konfigurationsdatei durch python
  • IOError beim Schreiben in Datei in Python
  • Python-Lese aus Datei in mehrere Listen
  • Wie lese ich mehrere Wörterbücher aus einer Datei in Python?
  • Datei zu groß python
  • 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.

    Python ist die beste Programmiersprache der Welt.