Da es jedes Mal schwierig ist, dies zu überprüfen, werde ich zusammenfassen, wie Dateien / Verzeichnisse mit Python betrieben werden.
In [1]: import os
Vorhandene Datei
In [2]: os.path.exists("./test1/test1.txt")
Out[2]: True
Nicht vorhandene Datei
In [3]: os.path.exists("./test1/test1.doc")
Out[3]: False
Vorhandenes Verzeichnis
In [4]: os.path.exists("./test1")
Out[4]: True
Nicht vorhandenes Verzeichnis
In [5]: os.path.exists("./test2")
Out[5]: False
Datei
In [6]: os.path.isfile("./test1/test1.txt")
Out[6]: True
Verzeichnis
In [7]: os.path.isfile("./test1")
Out[7]: False
Nicht vorhandene Datei
In [8]: os.path.isfile("./test1/test1.doc")
Out[8]: False
Verzeichnis
In [9]: os.path.isdir("./test1")
Out[9]: True
Datei
In [10]: os.path.isdir("./test1/test1.txt")
Out[10]: False
Nicht vorhandenes Verzeichnis
In [11]: os.path.isdir("./test2")
Out[11]: False
In [12]: os.mkdir("./test2")
In [13]: ls
test1/ test2/
Die Metadaten werden nicht für copyfile und copy kopiert, aber die Metadaten werden für copy2 kopiert. Wenn Sie copy2 verwenden, wird auch das Erstellungsdatum der Datei kopiert, aber copyfile und copy haben ein neues Erstellungsdatum für die Datei.
In [16]: import shutil
In [17]: shutil.copyfile("./test1/test1.txt", "./test2.txt")
In [18]: ls
test1/ test2.txt
In [19]: shutil.copy("./test1/test1.txt", "./test3.txt")
In [20]: shutil.copy2("./test1/test1.txt", "./test4.txt")
In [21]: ls
test1/ test1.txt test2.txt test3.txt test4.txt
Beim Erstellen eines neuen Ordners und beim Kopieren
In [22]: shutil.copytree("./test1", "./test2")
In [23]: ls
test1/ test1.txt test2/ test2.txt test3.txt test4.txt
In [24]: ls test1
test1.log test10.txt test2.txt test3.log test30.txt
test1.txt test2.log test20.txt test3.txt test4.txt
In [25]: ls test2
test1.log test10.txt test2.txt test3.log test30.txt
test1.txt test2.log test20.txt test3.txt test4.txt
Beim Kopieren in einen vorhandenen Ordner wird eine Fehlermeldung angezeigt
In [27]: os.mkdir("./test2")
In [28]: shutil.copytree("./test1", "./test2")
OSError: [Errno 17] File exists: './test2'
Wenn Sie in ein vorhandenes Verzeichnis kopieren möchten
In [29]: from distutils.dir_util import copy_tree
In [30]: copy_tree("./test1", "./test2")
In [31]: ls test1
test1.log test10.txt test2.txt test3.log test30.txt
test1.txt test2.log test20.txt test3.txt test4.txt
In [32]: ls test2
test1.log test10.txt test2.txt test3.log test30.txt
test1.txt test2.log test20.txt test3.txt test4.txt
In [33]: os.remove("./test1.txt")
In [34]: ls
test1/ test2/ test2.txt test3.txt test4.txt
So löschen Sie ein leeres Verzeichnis Ich erhalte eine Fehlermeldung, wenn sich Dateien im Verzeichnis befinden
In [14]: os.rmdir("./test2")
In [15]: ls
test1/
Beim Löschen des Inhalts des gesamten Ordners Der Inhalt des Ordners ist möglicherweise leer.
In [35]: shutil.rmtree("./test2")
In [36]: ls
test1/ test2.txt test3.txt test4.txt
Eine Kombination aus Glob und Entfernen
In [43]: ls test2
test1.log test10.txt test2.txt test3.log test30.txt
test1.txt test2.log test20.txt test3.txt test4.txt
In [44]: [os.remove(f) for f in glob.glob("./test2/*.log")]
Out[44]: [None, None, None]
In [45]: ls test2
test1.txt test2.txt test3.txt test4.txt
test10.txt test20.txt test30.txt
In [52]: ls test2
test1.log test10.txt test2.txt test3.log test30.txt
test1.txt test2.log test20.txt test3.txt test4.txt
In [53]: shutil.move("./test2/test1.txt", ".")
In [54]: ls
test1/ test1.txt test2/
In [55]: ls test2
test1.log test2.log test20.txt test3.txt test4.txt
test10.txt test2.txt test3.log test30.txt
Datei umbenennen
In [56]: os.rename("./test1.txt", "./test2.txt")
In [57]: ls
test1/ test2/ test2.txt
Verzeichnis umbenennen
In [58]: os.rename("./test2", "./test3")
In [59]: ls
test1/ test2.txt test3/
In [60]: ftitle, fext = os.path.splitext('/path/to/test1.txt')
In [62]: fext
Out[62]: '.txt'
In [60]: ftitle, fext = os.path.splitext('/path/to/test1.txt')
In [61]: ftitle
Out[61]: '/path/to/test1'
In [65]: os.path.basename('/path/to/test1.txt')
Out[65]: 'test1.txt'
Das Arbeiten mit Windows Path unter Linux funktioniert nicht. Natürlich ist es unter Windows in Ordnung
In [66]: os.path.basename('\\path\\to\\test1.txt')
Out[66]: '\\path\\to\\test1.txt'
Wenn Sie es unter Linux als Windows-Pfad behandeln möchten
In [67]: import ntpath
In [68]: ntpath.basename('/path/to/test1.txt')
Out[68]: 'test1.txt'
Es ist in Ordnung, wenn der Windows-Pfad kommt
In [69]: ntpath.basename('\\path\\to\\test1.txt')
Out[69]: 'test1.txt'
In [70]: os.path.split('/path/to/test1.txt')
Out[70]: ('/path/to', 'test1.txt')
Wenn Sie es unter Linux als Windows-Pfad behandeln möchten
In [71]: import ntpath
In [72]: ntpath.split('\\path\\to\\test1.txt')
Out[72]: ('\\path\\to', 'test1.txt')
In [73]: ntpath.split('/path/to/test1.txt')
Out[73]: ('/path/to', 'test1.txt')
In [74]: os.path.join('/path/to','test1.txt')
Out[74]: '/path/to/test1.txt'
Recommended Posts