Bonjour,
J'ai un script avec une lecture de fichier, je l'ai exécuté sur les ordinateurs de la fac et pas de soucis. Cependant, lorsque je l'exécute sur mon pc personnel j'ai un message d'erreur comme quoi le fichier n'existe pas. (mon script et mon fichier sont tous dans le même dossier)
J'ai également essayé de créer un nouveau fichier texte via Python, je n'ai pas de message d'erreur, mais le fichier n'est pas créé.

Je suppose donc que c'est un problème avec mon ordinateur, mais je ne m'y connait pas du tout. Si quelqu'un aurait une idée j'apprécierais. Merci.
Modérateur
Et l'eau,

pas de code, pas de réponse..... Tu es sur quel environnement (os) ?

#coding:utf-8
import os
import inspect
try:
    f = "__liste-fonts.txt"

    if not os.path.isfile(f):
        raise FileNotFoundError("le chemin ne parait pas être juste (ligne : %s - fichier : %s)" % (inspect.currentframe().f_lineno, inspect.currentframe().f_code.co_filename))
except FileNotFoundError as e:
    print('erreur system', e)

Modifié par niuxe (13 Dec 2019 - 16:04)
Je suis sur Windows, voici le script :
Comme je l'ai écrit, il fonctionne très bien sur les ordinateurs de la fac et de ma camarade, mais pas sur le mien.


handle = open("ABU.csv","r")		

dico = dict()			

for ligne in handle :			
	if "\t" in ligne:			
		ligne=ligne.strip()		
		coupe = ligne.split("\t")	
		flechie = coupe[0]			
		lemme = coupe[1]			
		traits = coupe[2].split(":")	
		cat = traits[0]		
		sscat = traits[1:]	
		sscat = ":".join(sscat)		
		
		if flechie not in dico.keys():	
			dico[flechie]={}			
		if lemme not in dico[flechie].keys():	
			dico[flechie][lemme]=[]		
		
		dico[flechie][lemme].append({"cat":cat , "sscat":sscat})	
		print(flechie)		

handle.close()

Modifié par joycin (13 Dec 2019 - 19:32)
Modérateur
1. le franglais ==> beurk (PEP20) soit le français, soit l'anglais (aucune ambiguïté est admise (PEP20))
2. le nom de tes variables laisse à désirer... ça doit être explicite (PEP20)
3. tu n'utilises pas les modules appropriés et tu essaies de réinventer l'eau chaude....
4. on vérifie toujours si le fichier est accessible
5. on vérifie aussi si la donnée est accessible
6. par convention, on utilise 4 espaces pour l'indentation. Au passage, je t'invite à lire ou relire la PEP8

# coding:utf-8
import os
import csv
import inspect

try:
    if __name__ == "__main__":
        source_file = "abu.csv"
        tab = "\t"
        mode = "r"
        data = {}

        if not os.path.isfile(source_file):
            error = "le fichier est introuvable '%s' (ligne : %s - fichier : %s)"
            args = (
                source_file,
                inspect.currentframe().f_lineno,
                inspect.currentframe().f_code.co_filename
            )
            raise FileNotFoundError(error % args)

        with open(source_file, mode) as csv_file:
            rows = csv.reader(csv_file, delimiter=tab)
            for index_row, cell in enumerate(rows):
                for index_cell in range(len(cell)):
                    if not cell[index_cell]:
                        error = "une donnée est manquante ligne : %s - cellule : %s (ligne : %s - fichier : %s)"
                        args = (
                            index_row,
                            index_cell,
                            inspect.currentframe().f_lineno,
                            inspect.currentframe().f_code.co_filename
                        )
                        raise ValueError(error % args)

                if cell[0] not in data.keys():
                    data[cell[0]] = {}
                if cell[1] not in data[cell[0]].keys():
                    data[cell[0]][cell[1]] = []

                category, sub_category = cell[2].split(':', 1)
                context = {"category": category, "sub_category": sub_category}
                data[cell[0]][cell[1]].append(context)
            csv_file.close()
        print(data)

except (FileNotFoundError, ValueError) as e:
    print('error system >>> ', e)


J'avoue que ma gestion d'exception est moyenne. Mais déjà, c'est beaucoup plus lisible et beaucoup plus carré. Après, c'est juste un petit script pour parser un csv. Au fait pourquoi des tabulations comme délimitation ?
Modifié par niuxe (14 Dec 2019 - 03:35)