python - tablas - Crea un archivo si no existe.
hacer un dataframe en python (7)
Necesito ayuda con Python. Estoy tratando de abrir un archivo, y si el archivo no existe, necesito crearlo y abrirlo para escribir. Tengo esto hasta ahora:
#open file for reading
fn = input("Enter file to open: ")
fh = open(fn,''r'')
# if file does not exist, create it
if (!fh)
fh = open ( fh, "w")
El mensaje de error dice que hay un problema en la línea if(!fh)
. ¿Puedo usar exist
como en Perl?
Bueno, primero que nada, en Python no hay !
Operador, eso not
sería. Pero open
tampoco fallaría silenciosamente, arrojaría una excepción. Y los bloques deben sangrarse correctamente: Python usa espacios en blanco para indicar la contención del bloque.
Así obtenemos:
fn = input(''Enter file name: '')
try:
file = open(fn, ''r'')
except IOError:
file = open(fn, ''w'')
Creo que esto debería funcionar:
#open file for reading
fn = input("Enter file to open: ")
try:
fh = open(fn,''r'')
except:
# if file does not exist, create it
fh = open(fn,''w'')
Además, escribió incorrectamente fh = open ( fh, "w")
cuando el archivo que deseaba abrir era fn
El uso de input()
implica Python 3, las versiones recientes de Python 3 han dejado en desuso la excepción IOError
(ahora es un alias para OSError
). Asumiendo que estás usando Python 3.3 o posterior:
fn = input(''Enter file name: '')
try:
file = open(fn, ''r'')
except FileNotFoundError:
file = open(fn, ''w'')
Primero permítame mencionar que probablemente no quiera crear un objeto de archivo que eventualmente pueda abrirse para leer O escribir, dependiendo de una condición no reproducible. Necesitas saber qué métodos se pueden usar, leer o escribir, lo que depende de lo que quieras hacer con el objeto de archivo.
Dicho esto, puedes hacerlo como se propuso That One Random Scrub, usando try: ... excepto: En realidad esa es la forma propuesta, de acuerdo con el lema de Python "Es más fácil pedir perdón que permiso".
Pero también puedes probar fácilmente la existencia:
import os
# open file for reading
fn = raw_input("Enter file to open: ")
if os.path.exists(fn):
fh = open(fn, "r")
else:
fh = open(fn, "w")
Nota: use raw_input () en lugar de input (), porque input () intentará ejecutar el texto ingresado. Si accidentalmente quiere probar la importación de archivos, obtendrá un SyntaxError.
Si no necesita atomicidad, puede usar el módulo os:
import os
if not os.path.exists(''/tmp/test''):
os.mknod(''/tmp/test'')
ACTUALIZAR :
Como mencionó Cory Klein , en Mac OS para usar os.mknod() necesita un permiso de root, por lo que si es usuario de Mac OS, puede usar open() lugar de os.mknod()
import os
if not os.path.exists(''/tmp/test''):
with open(''/tmp/test'', ''w''): pass
Tenga cuidado, cada vez que se abre el archivo con este método, los datos antiguos en el archivo se destruyen independientemente de ''w +'' o simplemente ''w''.
import os
with open("file.txt", ''w+'' as f:
f.write("file is opened for business")
''''''
w write mode
r read mode
a append mode
w+ create file if it doesn''t exist and open it in write mode
r+ open an existing file in read+write mode
a+ create file if it doesn''t exist and open it in append mode
''''''
ejemplo:
file_name = ''my_file.txt''
f = open(file_name, ''a+'') # open file in append mode
f.write(''python rules'')
f.close()
Espero que esto ayude. [FYI estoy usando la versión 3.6.2 de python]