web-dev-qa-db-fra.com

Créer un fichier s'il n'existe pas

J'ai besoin d'aide avec Python. J'essaie d'ouvrir un fichier et si ce fichier n'existe pas, je dois le créer et l'ouvrir pour l'écriture. J'ai ceci jusqu'à présent:

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

Le message d'erreur indique qu'il y a un problème sur la ligne if(!fh). Puis-je utiliser exist comme en Perl?

41
Miguel Hernandez

Si vous n'avez pas besoin d'atomicité, vous pouvez utiliser le module os:

import os

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

UPDATE:

Comme mentionné , Cory Klein , sous Mac OS pour utiliser os.mknod () vous avez besoin d’une autorisation root, donc si vous êtes un utilisateur Mac OS, vous pouvez utiliser open () au lieu de os.mknod ()

import os

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

Tout d’abord, dans Python, il n’existe pas d’opérateur !, ce serait not. Mais open n'échouerait pas en silence non plus - il lirait une exception. Et les blocs doivent être correctement mis en retrait - Python utilise des espaces pour indiquer le confinement des blocs.

Nous obtenons ainsi:

fn = input('Enter file name: ')
try:
    file = open(fn, 'r')
except IOError:
    file = open(fn, 'w')
31
Antti Haapala
'''
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
'''

exemple:

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

J'espère que ça aide. [FYI utilise python version 3.6.2]

17
Gajendra D Ambi

L'utilisation de input() implique Python 3, les versions récentes Python 3 ont rendu l'exception IOError obsolète (il s'agit maintenant d'un alias pour OSError). En supposant que vous utilisiez Python 3.3 ou version ultérieure:

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

Je pense que cela devrait fonctionner:

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

En outre, vous avez incorrectement écrit fh = open ( fh, "w") lorsque le fichier que vous vouliez ouvrir était fn

6

Soyez averti, chaque fois que le fichier est ouvert avec cette méthode, les anciennes données du fichier sont détruites indépendamment du "w +" ou simplement du "w".

import os

with open("file.txt", 'w+') as f:
    f.write("file is opened for business")
1
Clint Hart

Tout d’abord, permettez-moi de mentionner que vous ne souhaiterez probablement pas créer un objet fichier pouvant éventuellement être ouvert pour la lecture OR, en fonction d’une condition non reproductible. Vous devez savoir quelles méthodes peuvent être utilisées, en lecture ou en écriture, ce qui dépend de ce que vous voulez faire avec le fichier file.

Cela dit, vous pouvez le faire comme le propose One One Random Scrub, en utilisant try: ... sauf :. En fait, tel est le moyen proposé, selon le slogan python "Il est plus facile de demander pardon que l'autorisation".

Mais vous pouvez aussi facilement tester l'existence:

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

Remarque: utilisez raw_input () au lieu de input (), car input () essaiera d’exécuter le texte saisi. Si vous voulez accidentellement tester le fichier "import", vous obtiendrez une SyntaxError.

0
Michael S.