Me gustaría crear un archivo con la ruta x
usando python. He estado usando os.system(y)
donde y = 'touch %s' % (x)
. He buscado una versión que no sea de directorio de os.mkdir
, pero no he podido encontrar nada. ¿Hay una herramienta como esta para crear un archivo sin abrirlo, o usar el sistema o popen/subprocess?Crear archivo vacío usando python
Respuesta
No hay manera de crear un archivo sin abrirlo
Hay os.mknod("newfile.txt")
(pero requiere privilegios de root en OSX). La llamada al sistema para crear un archivo es en realidad open()
con el indicador O_CREAT
. Así que no importa cómo, siempre abrirás el archivo.
Así que la forma más fácil de crear simplemente un archivo sin truncar que en caso de que exista es la siguiente:
open(x, 'a').close()
En realidad se podría omitir el .close()
ya que el GC refcounting de CPython se cerrará inmediatamente después de la declaración open()
terminado, pero es más limpio hacerlo explícitamente y confiar en el comportamiento específico de CPython tampoco es bueno.
En caso de que quiera comportamiento touch
's (es decir, actualizar el mtime en caso de que el archivo existe):
import os
def touch(path):
with open(path, 'a'):
os.utime(path, None)
Se podría extender esto para crear también cualquier directorio en el camino que no existen:
basedir = os.path.dirname(path)
if not os.path.exists(basedir):
os.makedirs(basedir)
Se ve bien ... "Truncar" es esencialmente "claro", ¿verdad? – tkbx
Sí, abrir un archivo con el indicador 'w' (escribir) lo vacía mientras lo abre con' a' (append) no lo hace. – ThiefMaster
No se puede confiar en cerrar el archivo inmediatamente. Esto no es una cuestión de limpieza, ya que el refcounting es solo un detalle de implementación. No Python, excepto CPython lo hace. ¿Desea hacer que su programa sea cinco veces más rápido con PyPy o ejecutarlo en un entorno Java/.NET con Jython/IronPython? Es una lástima que no hayas cerrado esos archivos, ahora tu programa está goteando como un tamiz;) Es especialmente horrible desde 2.5, ya que 'with' hace que * sea más fácil * cerrar el archivo a tiempo (e incluso frente a excepciones y referencias circulares) ** y ** el código se vuelve más claro para arrancar. – delnan
Por supuesto, hay una manera de crear archivos sin abrir. Es tan fácil como llamar al os.mknod("newfile.txt")
. El único inconveniente es que esta llamada requiere privilegios de root en OSX.
Gran punto Ver también https://docs.python.org/3/library/os.html – poolie
- 1. ¿Crear un archivo vacío para escribir?
- 2. Crear un archivo csv vacío en R
- 3. Crear un nuevo archivo txt usando VB.NET
- 4. Crear archivo usando template.erb
- 5. ¿Cómo crear un archivo tar completamente comprimido usando Python?
- 6. Cookiejar vacío usando SUDS
- 7. Crear archivos SVG usando Python
- 8. ¿Cuál es la forma más simple de crear un iterable vacío usando rendimiento en Python?
- 9. ¿Cómo puedo crear un archivo PNG n * m vacío en Python?
- 10. ¿Cómo crear un delegado vacío usando Expression Trees?
- 11. Crear un archivo RDF usando un archivo txt como entrada
- 12. Comience a crear sitios web usando Python
- 13. argumento vacío python
- 14. Python: compruebe si un archivo está vacío o no
- 15. stream.CopyTo - archivo vacío. asp.net
- 16. Creando un archivo XML simple usando python
- 17. ¿Cómo creo un archivo vacío en emacs?
- 18. JFileChooser elija el archivo vacío
- 19. Crear una matriz 3D usando Python
- 20. ¿Cómo puedo crear un HttpResponse maniquí vacío
- 21. crear un archivo tmp en Python
- 22. crear archivo de tamaño particular en python
- 23. Crear un archivo ZIP cifrado en Python
- 24. Cómo crear el archivo huevo de Python
- 25. usando OpenSSL para crear el archivo .pfx
- 26. ¿Cómo crear un archivo .ipa usando Xcode?
- 27. Android: Crear archivo usando el método createNewFile()
- 28. Crear archivo UTF-8 usando HttpServletResponse
- 29. Cómo crear un archivo usando Makefile
- 30. Crear un archivo de jerarquía usando perl
¿Por qué es malo abrir? –
@LevLevitsky porque tendría que cerrarlo de nuevo: P. Tengo que crear miles de archivos, y simplemente tocar el archivo parece más limpio. – tkbx
FYI, mientras que el uso de un comando externo para esto siempre es malo, la forma correcta de ejecutarlo sería 'subprocess.call (['touch', x])' – ThiefMaster