Ich möchte eine Datei mit Pfad x
mit Python erstellen. Ich verwende os.system(y)
wo y = 'touch %s' % (x)
. Ich habe nach einer Nicht-Verzeichnisversion von os.mkdir
gesucht, aber ich konnte nichts finden. Gibt es ein Tool wie dieses, um eine Datei zu erstellen, ohne sie zu öffnen oder System oder Popen/Subprozess zu verwenden?Erstellen Sie eine leere Datei mit Python
Antwort
Es gibt keine Möglichkeit, eine Datei zu erstellen, ohne Öffnen es
Es gibt os.mknod("newfile.txt")
(aber es erfordert Root-Rechte auf OSX). Der Systemaufruf zum Erstellen einer Datei ist eigentlich open()
mit dem O_CREAT
Flag. Egal wie, Sie werden die Datei immer öffnen.
So ist der einfachste Weg, um einfach eine Datei zu erstellen, ohne dass es für den Fall, zu Kürzen es existiert, ist dies:
open(x, 'a').close()
Eigentlich könnte man die .close()
weglassen, da die Refcounting GC von CPython wird es unmittelbar nach der open()
Aussage schließen fertig - aber es ist sauberer, dies explizit zu tun, und es ist auch nicht gut, sich auf CPython-spezifisches Verhalten zu verlassen.
Falls Sie touch
‚s Verhalten (dh aktualisieren Sie die mtime, falls die Datei vorhanden ist):
import os
def touch(path):
with open(path, 'a'):
os.utime(path, None)
du auch alle Verzeichnisse im Pfad erstellen erweitern könnte, die nicht existieren:
basedir = os.path.dirname(path)
if not os.path.exists(basedir):
os.makedirs(basedir)
Sieht gut aus ... "Truncate" ist im Wesentlichen "klar", oder? – tkbx
Ja, das Öffnen einer Datei mit dem 'w' (write) Flag leert es beim Öffnen mit' a' (append) nicht. – ThiefMaster
Refcounting Schließen der Datei sofort ist nicht verlässlich. Dies ist keine Frage der Sauberkeit, da Refcounting nur ein Implementierungsdetail ist. Kein Python außer CPython tut es. Möchten Sie Ihr Programm mit PyPy fünfmal schneller machen oder es in einer Java/.NET-Umgebung mit Jython/IronPython ausführen? Schade, dass du diese Dateien nicht geschlossen hast, jetzt ist dein Programm wie ein Sieb undicht;) Es ist besonders schrecklich seit 2.5, als 'mit' macht es * einfacher * die Datei rechtzeitig zu schließen (und sogar angesichts von Ausnahmen und Zirkelverweisen) ** und ** der Code wird klarer zum Booten. – delnan
Natürlich gibt es eine Möglichkeit, Dateien ohne Öffnen zu erstellen. Es ist so einfach wie das Telefonieren os.mknod("newfile.txt")
. Der einzige Nachteil ist, dass dieser Aufruf Root-Rechte für OSX benötigt.
Großer Punkt. Siehe auch https://docs.python.org/3/library/os.html – poolie
- 1. Erstellen Sie eine XML-Datei mit Python?
- 2. Leere Datei zum Schreiben erstellen?
- 3. Python schreibt leere JSON-Datei
- 4. erstellen Sie eine leere BitmapSource in C#
- 5. Erstellen Sie eine leere Fußzeile UICollectionReusableCell
- 6. Python Schreiben in eine Datei zurückgibt leere Datei
- 7. Erstellen Sie leere json Array mit jsoncpp
- 8. Erstellen Sie eine Postgres-Datenbank mit Python
- 9. Erstellen Sie eine Abfragesprache mit Python
- 10. Erstellen Sie eine Excel-Datei mit vbscripts
- 11. Erstellen Sie eine CSS-Datei mit PHP
- 12. Erstellen Sie eine PDF-Datei mit PHP
- 13. So erstellen Sie eine Datei mit Makefile
- 14. Erstellen einer Python-Datei mit Python
- 15. Erstellen Sie eine Datei lesbare
- 16. erstellen Sie eine AVI-Datei
- 17. Wie kann ich eine leere n * m PNG-Datei in Python erstellen?
- 18. So benennen Sie eine Datei mit Python
- 19. Erstellen Sie eine WAR-Datei
- 20. Erstellen Sie eine PDF-Datei der Python-Dokumentation
- 21. Erstellen Sie eine UTF-8-CSV-Datei in Python
- 22. Python - löschen Sie leere Textzeilen am Ende der Datei
- 23. Erstellen Sie neue xlsx-Datei mit Python gleich einem anderen
- 24. Versuchen, leere Spalten in csv-Datei mit Python zu finden
- 25. Erstellen Sie eine Shell-Befehlszeilenanwendung mit Python und klicken Sie
- 26. Python erstellen zip-Datei
- 27. eine Datei mit Python erstellen sudo macht seinen Besitzer root
- 28. Gibt es eine leere Klasse in Python?
- 29. Laden Sie eine Cache-Datei in Maya mit Python und erstellen Sie die gleiche Renderausgabe
- 30. So erstellen Sie eine leere Anwendung in der neuen Xcode
Warum ist das Öffnen schlecht? –
@LevLevitsky, weil ich es wieder schließen müsste: P. Ich muss Tausende von Dateien erstellen und das Berühren der Datei scheint sauberer zu sein. – tkbx
FYI, während die Verwendung eines externen Befehls für diese immer schlecht ist, wäre die richtige Art, es auszuführen, subprocess.call (['touch', x]) ' – ThiefMaster