Heim  >  Artikel  >  Backend-Entwicklung  >  Detaillierte Erläuterung von Beispielen für die Python-Dateiverwaltung

Detaillierte Erläuterung von Beispielen für die Python-Dateiverwaltung

高洛峰
高洛峰Original
2017-01-21 14:36:341589Durchsuche

Die Beispiele in diesem Artikel beschreiben die Methode der Python-Dateiverwaltung. Teilen Sie es als Referenz mit allen. Die Details lauten wie folgt:

1. Dateiverwaltung in Python

Dateiverwaltung ist eine Grundfunktion und ein wichtiger Bestandteil vieler Anwendungen. Python kann die Dateiverwaltung extrem einfach machen, insbesondere im Vergleich zu anderen Sprachen.
Im Folgenden erklärt Peyton McCullough die Grundlagen der Dateiverwaltung.

Einführung

Die von Ihnen gespielten Spiele werden in Dateien gespeichert. Die von Ihnen aufgegebenen Bestellungen werden natürlich auch in Dateien gespeichert.

Die Dateiverwaltung ist ein wichtiger Bestandteil der vielen Anwendungen, die in fast jeder Sprache geschrieben sind. Python ist sicherlich keine Ausnahme. In diesem Artikel erfahren Sie, wie Sie mit einigen Modulen Dateien bearbeiten. Wir werden die Vorgänge des Lesens von Dateien, Schreibens von Dateien, Hinzufügen von Dateiinhalten und einiger alternativer Verwendungen abschließen. Okay, fangen wir an.

Dateien lesen und schreiben

Der grundlegendste Dateivorgang ist natürlich das Lesen und Schreiben von Daten in der Datei. Dies ist auch sehr einfach zu meistern. Öffnen Sie nun eine Datei zum Schreiben:

fileHandle = open ( 'test.txt', 'w' )

'w' bedeutet, dass die Datei mit Daten geschrieben wird, der Rest der Anweisung ist leicht zu verstehen. Der nächste Schritt besteht darin, die Daten in die Datei zu schreiben:

fileHandle.write ( 'This is a test.\nReally, it is.' )

Diese Anweisung schreibt „Dies ist ein Test“ in die erste Zeile der Datei und „Wirklich, das ist es.“ Zeile der Datei. Zum Schluss müssen wir die Datei bereinigen und schließen:

fileHandle.close()

Wie Sie sehen, ist dies mit dem objektorientierten Mechanismus von Python wirklich einfach. Es ist zu beachten, dass beim erneuten Schreiben von Daten in die Datei mit der Methode „w“ der gesamte ursprüngliche Inhalt gelöscht wird. Wenn Sie den ursprünglichen Inhalt beibehalten möchten, können Sie die „a“-Methode verwenden, um Daten an das Ende der Datei anzuhängen:

fileHandle = open ( 'test.txt', 'a' ) 
fileHandle.write ( '\n\nBottom line.' ) 
fileHandle.close()

Dann lesen wir test.txt und Inhalt anzeigen:

fileHandle = open ( 'test.txt' ) 
print fileHandle.read() 
fileHandle.close()

Die obige Anweisung liest die gesamte Datei und zeigt die darin enthaltenen Daten an. Wir können auch eine Zeile in der Datei lesen:

fileHandle = open ( 'test.txt' ) 
print fileHandle.readline() # "This is a test." 
fileHandle.close()

Gleichzeitig können wir den Dateiinhalt auch in einer Liste speichern:

fileHandle = open ( 'test.txt' ) 
fileList = fileHandle.readlines()<DIV></DIV> 
for fileLine in fileList: 
  print &#39;>>&#39;, fileLine 
fileHandle.close()

Wenn Python eine Datei liest, merkt es sich deren Position in der Datei, wie unten gezeigt:

fileHandle = open ( &#39;test.txt&#39; ) 
garbage = fileHandle.readline() 
fileHandle.readline() # "Really, it is."fileHandle.close()

Wie Sie sehen können, ist nur die zweite Zeile vorhanden angezeigt. Wir können dieses Problem jedoch lösen, indem wir Python bitten, von Anfang an zu lesen:

fileHandle = open ( &#39;test.txt&#39; ) 
garbage = fileHandle.readline() 
fileHandle.seek ( 0 ) 
print fileHandle.readline() # "This is a test." 
fileHandle.close()

Im obigen Beispiel bitten wir Python, die Daten ab dem ersten Byte des zu lesen Datei. Es wird also die erste Textzeile angezeigt. Natürlich können wir auch den Speicherort von Python in der Datei abrufen:

fileHandle = open ( &#39;test.txt&#39; ) 
print fileHandle.readline() # "This is a test." 
print fileHandle.tell() # "17" 
print fileHandle.readline() # "Really, it is."

oder jeweils ein paar Bytes in der Datei lesen:

fileHandle = open ( &#39;test.txt&#39; ) 
print fileHandle.read ( 1 ) # "T" 
fileHandle.seek ( 4 ) 
print FileHandle.read ( 1 ) # " "(原文有错)

In Windows- und Macintosh-Umgebungen müssen Sie manchmal Dateien im Binärmodus lesen und schreiben, z. B. Bilder und ausführbare Dateien. Fügen Sie zu diesem Zeitpunkt einfach ein „b“ zum Methodenparameter zum Öffnen der Datei hinzu:

fileHandle = open ( &#39;testBinary.txt&#39;, &#39;wb&#39; )
fileHandle.write ( &#39;There is no spoon.&#39; )
fileHandle.close()
fileHandle = open ( &#39;testBinary.txt&#39;, &#39;rb&#39; )
print fileHandle.read()
fileHandle.close()

2. Erhalten Sie Informationen aus vorhandenen Dateien

Verwenden Sie das Modul in Python, das Informationen aus vorhandenen Dateien abrufen kann. Sie können das Modul „os“ und das Modul „stat“ verwenden, um grundlegende Informationen zu Dateien zu erhalten:

import os 
import stat 
import time<DIV></DIV> 
fileStats = os.stat ( &#39;test.txt&#39; ) 
fileInfo = { 
  &#39;Size&#39; : fileStats [ stat.ST_SIZE ], 
  &#39;LastModified&#39; : time.ctime ( fileStats [ stat.ST_MTIME ] ), 
  &#39;LastAccessed&#39; : time.ctime ( fileStats [ stat.ST_ATIME ] ), 
  &#39;CreationTime&#39; : time.ctime ( fileStats [ stat.ST_CTIME ] ), 
  &#39;Mode&#39; : fileStats [ stat.ST_MODE ] 
} 
for infoField, infoValue in fileInfo: 
  print infoField, &#39;:&#39; + infoValue 
if stat.S_ISDIR ( fileStats [ stat.ST_MODE ] ): 
  print &#39;Directory. &#39;
else: 
  print &#39;Non-directory.&#39;

Das obige Beispiel erstellt ein Wörterbuch mit grundlegenden Informationen zu Dateien. Anschließend werden die entsprechenden Informationen angezeigt und verraten uns, ob es sich bei dem geöffneten Verzeichnis um ein Verzeichnis handelt. Wir können auch versuchen zu sehen, ob es sich bei den geöffneten Typen um andere Typen handelt:

import os 
import stat 
fileStats = os.stat ( &#39;test.txt&#39; ) 
fileMode = fileStats [ stat.ST_MODE ] 
if stat.S_ISREG ( fileStats [ stat.ST_MODE ] ): 
  print &#39;Regular file.&#39;
elif stat.S_ISDIR ( fileStats [ stat.ST_MODE ] ): 
  print &#39;Directory.&#39;
elif stat.S_ISLNK ( fileStats [ stat.ST_MODE ] ): 
  print &#39;Shortcut.&#39;
elif stat.S_ISSOCK ( fileStats [ stat.ST_MODE ] ): 
  print &#39;Socket.&#39;
elif stat.S_ISFIFO ( fileStats [ stat.ST_MODE ] ): 
  print &#39;Named pipe.&#39;
elif stat.S_ISBLK ( fileStats [ stat.ST_MODE ] ): 
  print &#39;Block special device.&#39;
elif stat.S_ISCHR ( fileStats [ stat.ST_MODE ] ):

Darüber hinaus können wir „os.path“ verwenden, um grundlegende Informationen zu erhalten:

import os.path 
fileStats = &#39;test.txt&#39;
if os.path.isdir ( fileStats ): 
  print &#39;Directory.&#39;
elif os.path.isfile ( fileStats ): 
  print &#39;File.&#39;
elif os.path.islink ( fileStats ): 
  print &#39;Shortcut.&#39;
elif os.path.ismount ( fileStats ): 
  print &#39;Mount point.&#39;
import os 
for fileName in os.listdir ( &#39;/&#39; ): 
  print fileName

Wie Sie sehen, ist dies einfach und kann in drei Codezeilen durchgeführt werden.

Das Erstellen eines Verzeichnisses ist ebenfalls sehr einfach:

import os 
os.mkdir ( &#39;testDirectory&#39; )

Das gerade erstellte Verzeichnis löschen:

import os 
os.rmdir ( &#39;testDirectory )

Sie können auch mehrstufige Verzeichnisse erstellen:

import os
os.makedirs ( &#39;I/will/show/you/how/deep/the/rabbit/hole/goes&#39; )
    os.makedirs ( &#39;I/will/show/you/how/deep/the/rabbit/hole/goes&#39; )

Wenn Sie den erstellten Ordnern nichts hinzufügen, können Sie sie alle auf einmal löschen (d. h. alle aufgelisteten leeren Dateien löschen). Ordner):

import os
os.removedirs ( &#39;I/will/show/you/how/deep/the/rabbit/hole/goes&#39;

Wenn wir einen bestimmten Dateityp bearbeiten müssen, können wir das Modul „fnmatch“ auswählen. Das Folgende ist der Inhalt der „.txt“-Datei und der Dateiname der „.exe“-Datei:

import fnmatch
import os
for fileName in os.listdir ( &#39;/&#39; ):
  if fnmatch.fnmath ( fileName, &#39;*.txt&#39; ):
    print open ( fileName ).read()
  elif fnmatch.fnmatch ( fileName, &#39;*.exe&#39; ):
    print fileName

Zeichen können Zeichen beliebiger Länge darstellen. Wenn Sie ein Zeichen zuordnen möchten, verwenden Sie das „?“-Symbol:

import fnmatch
import os
for fileName in os.listdir ( &#39;/&#39; ):
  if fnmatch.fnmatch ( fileName, &#39;?.txt&#39; ):
    print &#39;Text file.&#39;

Das Modul „fnmatch“ unterstützt reguläre Ausdrücke:

import fnmatch 
import os 
import re 
filePattern = fnmatch.translate ( &#39;*.txt&#39; ) 
for fileName in os.listdir ( &#39;/&#39; ): 
  if re.match ( filePattern, fileName ): 
    print &#39;Text file.&#39;

Wenn Sie nur einen Dateityp abgleichen müssen, ist die Verwendung des Moduls „glob“ eine bessere Möglichkeit. Das Format dieses Moduls ähnelt „fnmatch“:

import glob 
for fileName in glob.glob ( &#39;*.txt&#39; ): 
  print &#39;Text file.&#39;

Es ist auch möglich, eine Reihe von Zeichen abzugleichen, genau wie in einem regulären Ausdruck. Angenommen, Sie möchten den Dateinamen einer Datei mit nur einer Ziffer vor der Erweiterung anzeigen:

import glob 
for fileName in glob.glob ( &#39;[0-9].txt&#39; ): 
  print filename

Das Modul „glob“ verwendet dazu das Modul „fnmatch“.

4. Daten-Marshalling

Mit dem im vorherigen Abschnitt vorgestellten Modul können Sie Zeichenfolgen in Dateien lesen und schreiben.

Manchmal müssen Sie jedoch möglicherweise andere Datentypen übergeben, z. B. Listen, Tupel, Wörterbücher und andere Objekte. In Python können Sie dies mit Pickling tun. Sie können das Daten-Marshalling mit dem Modul „pickle“ in der Python-Standardbibliothek durchführen.

Als nächstes gruppieren wir eine Liste mit Zeichenfolgen und Zahlen:

import pickle 
fileHandle = open ( &#39;pickleFile.txt&#39;, &#39;w&#39; ) 
testList = [ &#39;This&#39;, 2, &#39;is&#39;, 1, &#39;a&#39;, 0, &#39;test.&#39; ] 
pickle.dump ( testList, fileHandle ) 
fileHandle.close()

Es ist auch nicht schwierig, die Gruppe zu teilen:

import pickle 
fileHandle = open ( &#39;pickleFile.txt&#39; ) 
testList = pickle.load ( fileHandle ) 
fileHandle.close()

Versuchen Sie nun, komplexere Daten zu speichern:

import pickle 
fileHandle = open ( 'pickleFile.txt', 'w' ) 
testList = [ 123, { 'Calories' : 190 }, 'Mr. Anderson', [ 1, 2, 7 ] ] 
pickle.dump ( testList, fileHandle ) 
fileHandle.close()
import pickle 
fileHandle = open ( &#39;pickleFile.txt&#39; ) 
testList = pickle.load ( fileHandle ) 
fileHandle.close()

如上所述,使用Python的"pickle"模块编组确实很简单。众多对象可以通过它来存储到文件中。如果可以的话,"cPickle"同样胜任这个工作。它和"pickle"模块一样,但是速度更快:

import cPickle 
fileHandle = open ( &#39;pickleFile.txt&#39;, &#39;w&#39; ) 
cPickle.dump ( 1776, fileHandle ) 
fileHandle.close()

五、创建"虚拟"文件

你用到的许多模块包含需要文件对象作为参数的方法。但是,有时创建并使用一个真实的文件并让人感到有些麻烦。所幸的是,在Python中,你可以使用"StringIO"模块来创建文件并将其保存在内存中:

import StringIO 
fileHandle = StringIO.StringIO ( "Let freedom ring" ) 
print fileHandle.read() # "Let freedom ring." 
fileHandle.close()

cStringIO"模块同样有效。它的使用方法和"StringIO"一样,但就像"cPickle"之于"pickle",它速度更快:

import cStringIO 
fileHandle = cStringIO.cStringIO ( "To Kill a Mockingbird" ) 
print fileHandle.read() # "To Kill a Mockingbid" 
fileHandle.close()

结论

文件管理,是众多编程语言的程序员在编写应用程序是经常遇到的问题。幸好,和其它语言相比,Python使其出乎意料地容易。Python的标准库中提供了许多相关的模块帮助程序员解决这方面的问题,而它的面向对象的机制也简化了操作。

好了,现在你已经了解了Python中文件管理的基本知识,可以在今后的应用程序中很好地使用了。

希望本文所述对大家Python程序设计有所帮助。

更多Python 文件管理实例详解相关文章请关注PHP中文网!

Stellungnahme:
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn