J'ai écrit un script pour lire un fichier texte en python.
Voici le code.
parser = argparse.ArgumentParser(description='script')
parser.add_argument('-in', required=True, help='input file',
type=argparse.FileType('r'))
parser.add_argument('-out', required=True, help='outputfile',
type=argparse.FileType('w'))
args = parser.parse_args()
try:
reader = csv.reader(args.in)
for row in reader:
print "good"
except csv.Error as e:
sys.exit('file %s, line %d: %s' % (args.in, reader.line_num, e))
for ln in args.in:
a, b = ln.rstrip().split(':')
Je voudrais vérifier si le fichier existe et n'est pas un fichier vide mais ce code me donne une erreur.
Je voudrais également vérifier si le programme peut écrire dans le fichier de sortie.
Commande:
python script.py -in file1.txt -out file2.txt
ERREUR:
good
Traceback (most recent call last):
File "scritp.py", line 80, in <module>
first_cluster = clusters[0]
IndexError: list index out of range
Pour vérifier si le fichier est présent et n'est pas vide, vous devez appeler la combinaison os.path.exists
et os.path.getsize
avec la condition "et". Par exemple:
import os
my_path = "/path/to/file"
if os.path.exists(my_path) and os.path.getsize(my_path) > 0:
# Non empty file exists
# ... your code ...
else:
# ... your code for else case ...
Comme alternative , vous pouvez également utiliser try/except
Avec os.path.getsize
(sans utiliser os.path.exists
) car il lève OSError
si le fichier n'existe pas ou si vous n'avez pas l'autorisation d'accéder au fichier . Par exemple:
try:
if os.path.getsize(my_path) > 0:
# Non empty file exists
# ... your code ...
else:
# Empty file exists
# ... your code ...
except OSError as e:
# File does not exists or is non accessible
# ... your code ...
Références du document Python 3
Renvoie la taille, en octets, du chemin. Augmentez
OSError
si le fichier n'existe pas ou est inaccessible.
Pour un fichier vide, il renverra 0
. Par exemple:
>>> import os
>>> os.path.getsize('README.md')
0
alors que os.path.exists(path)
:
Renvoie
True
si chemin fait référence à un chemin existant ou à un descripteur de fichier ouvert. RenvoieFalse
pour les liens symboliques rompus.Sur certaines plates-formes, cette fonction peut retourner
False
si l'autorisation n'est pas accordée pour exécuteros.stat()
sur le fichier demandé, même si le chemin existe physiquement.