web-dev-qa-db-fra.com

Comment vérifier que le fichier texte existe et n'est pas vide dans python

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
21
user3573959

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

  • os.path.getsize() :

    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. Renvoie False pour les liens symboliques rompus.

    Sur certaines plates-formes, cette fonction peut retourner False si l'autorisation n'est pas accordée pour exécuter os.stat() sur le fichier demandé, même si le chemin existe physiquement.

37
Moinuddin Quadri