2016-03-04 24 views
19

Ho bisogno di aiuto con Python. Sto cercando di aprire un file, e se il file non esiste, ho bisogno di crearlo e aprirlo per scrivere. Ho questo finora:Crea un file se non esiste

#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") 

Il messaggio di errore dice che c'è un problema sulla linea if(!fh). Posso usare exist come in Perl?

+0

Possibile duplicato di [Apri in Python non crea un file se non esiste] (http://stackoverflow.com/questions/2967194/open-in-python -does-not-create-a-file-if-it-doesnt-exist) –

risposta

4

penso che questo dovrebbe funzionare:

#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') 

Inoltre, è scritto in modo errato fh = open (fh, "w") quando il file si voleva aprire era fn

+4

Si presume che il file non possa essere aperto perché non esiste. Potrebbe essere che non hai permessi di lettura, o il nome del file non è valido in qualche modo. Bare "tranne" non è una buona idea. – cdarke

+0

Capisco che, (ora), ma questo sarà abbastanza efficace per il suo livello di programmazione, non è come se gli stessimo insegnando l'etichetta della programmazione o pre-impostandolo per 'class' però. –

+4

OK, il povero ragazzo viene da Perl quindi ha bisogno di tutto l'aiuto che può ottenere. – cdarke

15

Beh, prima di tutto, in Python non c'è nessun operatore !, che potrebbe essere not. Ma open non fallirebbe in modo silenzioso: genererebbe un'eccezione. E i blocchi devono essere indentati correttamente - Python usa spazi bianchi per indicare il contenimento dei blocchi.

Così otteniamo:

fn = input('Enter file name: ') 
try: 
    file = open(fn, 'r') 
except IOError: 
    file = open(fn, 'w') 
8

Utilizzando input() implica Python 3, recente Python 3 versioni hanno fatto eccezione IOError deprecata (ora è un alias per OSError). Quindi, supponendo che si sta utilizzando Python 3.3 o versioni successive:

fn = input('Enter file name: ') 
try: 
    file = open(fn, 'r') 
except FileNotFoundError: 
    file = open(fn, 'w') 
0

Prima di tutto lasciatemi dire che probabilmente non si desidera creare un oggetto file che alla fine può essere aperto per la lettura o la scrittura, a seconda di una condizione di non riproducibili . È necessario sapere quali metodi possono essere utilizzati, leggere o scrivere, il che dipende da cosa si vuole fare con il file oggetto.

Detto questo, puoi farlo come Quella Scrub a caso proposta, utilizzando prova: ... eccetto :. In realtà questo è il modo proposto, secondo il motto pitone "È più facile chiedere perdono che il permesso".

Ma si può anche facilmente verificare per l'esistenza:

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: utilizzare raw_input() al posto di ingresso(), a causa di ingresso() cercherà di eseguire il testo inserito. Se desideri accidentalmente testare il file "import", otterrai un SyntaxError.

+0

I commenti riguardanti 'input()' e 'raw_input()' si applicano solo a Python 2. Python 3 ha sostituito 'raw_input()' con 'input()' e il "vecchio" uso di 'input()' è scomparso . – cdarke

+0

Questo è possibile e sarebbe/è un buon miglioramento per renderlo più intuitivo. –

10

Se non avete bisogno di atomicità è possibile utilizzare modulo os:

import os 

if not os.path.exists('/tmp/test'): 
    os.mknod('/tmp/test') 

UPDATE:

Come Cory Klein accennato, su Mac OS per l'utilizzo di os.mknod() avete bisogno di un permessi di root, quindi se sei utente Mac OS, puoi usare open() invece di os.mknod()

import os 

if not os.path.exists('/tmp/test'): 
    with open('/tmp/test', 'w'): pass 
+0

macOS [richiede sudo i privilegi per eseguire mknod] (https://stackoverflow.com/a/32115794/446554), quindi è improbabile che sia portabile su Mac a meno che tu non stia eseguendo il tuo script python con 'sudo'. –

2
''' 
w write mode 
r read mode 
a append mode 

w+ create file if it doesn't exist and open it in write mode 
r+ create file if it doesn't exist and open it in read mode 
a+ create file if it doesn't exist and open it in append mode 
''' 

esempio:

file_name = 'my_file.txt' 
f = open(file_name, 'a+') # open file in append mode 
f.write('python rules') 
f.close() 

Spero che questo aiuta. [FYI sto usando Python versione 3.6.2]