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?
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
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')
'''
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]
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')
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
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")
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.