Gestion des fichiers CSV

Fermé
samirbenouaret Messages postés 9 Date d'inscription samedi 22 août 2020 Statut Membre Dernière intervention 2 septembre 2020 - 22 août 2020 à 21:36
samirbenouaret Messages postés 9 Date d'inscription samedi 22 août 2020 Statut Membre Dernière intervention 2 septembre 2020 - 24 août 2020 à 01:11
Bonjour,
Actuellement je travaille sur des fichiers csv. J'arrive à lire et récupérer les données avec la bibliothèque numpy en utilisant la fonction
pointage= np.loadtxt("produit.csv",delimiter=';',skiprows=14), mais je veux récupérer le s données ce fichier (produit) sans donner le nom de fichier à python. Je voudrais savoir s'il existe une bibliothèque ou une fonction qui va me permettre de trouver le nom de fichier.
Par exemeple:
nom_fichier=input("donner moi le nom de fichier"), après moi je lui donne le nom et il va chercher et récupérer le données.
Merci d'avance.




Configuration: Windows / Opera 70.0.3728.119
A voir également:

4 réponses

WillemVDD Messages postés 6 Date d'inscription vendredi 25 mai 2018 Statut Membre Dernière intervention 23 août 2020
22 août 2020 à 22:30
Je ne suis pas sûr de comprendre la question, donc je vais peut-être répondre à coté, mais tu peux rechercher le fichier de type .csv dans un répertoire de l'ordinateur en utilisant la notation '*.csv', ce qui signifie "tous le fichier de type .csv". Si par exemple tu as plusieurs fichier .csv dans un même répertoire, tu peux utiliser cela dans une boucle pour récupérés les données de tous les fichiers sans jamais utiliser leur nom.
Après je ne vois pas trop à quoi ça sert de faire cela, n'hésite pas à donner un peu de contexte (quel est le but de ton code?), parfois savoir cela permet de trouver une solution alternative ...
0
samirbenouaret Messages postés 9 Date d'inscription samedi 22 août 2020 Statut Membre Dernière intervention 2 septembre 2020
23 août 2020 à 15:07
Je vius remercie pour votre réponse; Alors le but de ce code c'est de traiter des fichiers de type csv avec python.il va me demander le nom de fichier, je lui donne le nom de fichier 1 (produit) et il va traiter les données.Pour la 2 ème fois, il va me demander le nom de fichier 2 , je lui donne le nom (étudiants) et il va traiter les données. Donc le but de ce code est de traiter un fichier sans mettre sans nom dans le code.
nom_fichier=input("donner moi le nom de fichier: ")
Aprés que je lui donne le nom1 il va le traiter directement, c'est à direavant l'exécution du programme je mis pas son nom.

0
WillemVDD Messages postés 6 Date d'inscription vendredi 25 mai 2018 Statut Membre Dernière intervention 23 août 2020
23 août 2020 à 22:54
D’accord je vois, merci pour les précisions. Dans ce cas il suffit d’utiliser une fonction non ?

Par exemple mettons que ta fonction de lecture de données de fichier .csv ressemble à ça :
def lecteurDonnees(filename,n,entete):
    f=open(filename,'r')
    i=0
    while i<entete:
        f.readline()
        i=i+1
    data=[]
    for i in range(0,n):
        data.append([])
    for ligne in f:
        valeur=ligne.split()
        for i in range(0,n):
            data[i].append(float(valeur[i]))
    return data

alors cette fonction c’est celle que j’utilise tout le temps, mais dans l’idée il suffit d’utiliser un argument à la place du nom du fichier dans la ligne open(filename,'r').

Il suffit ensuite d’appeler la fonction plus loin dans le code avec la ligne :
lecteurDonnees(filename,n,entete)

où bien sûr les arguments sont remplacé par leurs valeurs.

Pour la suite, la plus part des utilisateurs de python qui font de l’analyse de données évite de demander à l’utilisateur d’entré manuellement le nom du fichier, quitte à empiler la ligne d’appel avec 40 noms de fichier différent. L’objectif est que le code puisse être lancé et être 100% autonome, utile lorsque les calculs commence à être long …

Dans ton cas ça ne change pas grand-chose, demande à l’utilisateur le nom du fichier via un input en l’enregistrant dans la variable filename, avant la ligne d’appel. D’ailleurs, on peut même placer ça dans une boucle, comme suivant :
filename=''
for i in range(n):
    print('Enter le nom du fichier %01d'%(i+1))
    filename=input()
    print(filename)
    lecteurDonnees(filename,100,0)

et si tu ne sait pas à l'avance combien de fichier tu auras a traiter, pourquoi pas :
filename,i='',0
while filename!='stop':
    print('Enter le nom du fichier %01d (stop pour terminer)'%(i+1))
    filename=input()
    lecteurDonnees(filename,100,0)
    i=i+1

c'est pas ce qu'il n'y a de plus propre mais bon ...

Voilè j'espère que ça ta aidé, si tu as des questions supplémentaire n’hésite pas !



Parenthèse sur la fonction lecteurDonnees

Les arguments filename, n, entete sont respectivement : le nom du fichier (ou adresse complète de l'emplacement du fichier dans le cas où le fichier ne se trouve pas dans le même répertoire que le code python), le nombre de lignes totale à lire, et le nombre de lignes d'entêtes à sauter (typiquement les infos sur le contenu du fichier, si il n'y en a pas, mettre 0).

En modifiant le contenue de [ ] dans la ligne 9 tu peux choisir quoi mettre en cas de case vide dans le tableur, et en modifient le contenue de la .split() dans la ligne 11 tu peux choisir quel est l’élément séparateur entre les éléments de chaque ligne de ton fichier (utile si la fonction sert à lire autre chose que des fichiers .xls .csv, comme des .txt).
(Si il s'agit de valeur numérique ne pas oublier de remplacer la ligne 13 par
data[i].append(float(valeur[i]))
).

Fin de la parenthèse
0
samirbenouaret Messages postés 9 Date d'inscription samedi 22 août 2020 Statut Membre Dernière intervention 2 septembre 2020
24 août 2020 à 01:11
Je vous remercie infinnement, c'est trop gentil de votre part. J'ai exécuté le programme, il me demande d'entrer le nom de fichier, il trouve le fichier normal dans le répértoire de mon travail. En fait j'ai un fichier des fichiers excel qui sont vraimment pleins de données (131072 lignes). Je veux récupérer juste les valeurs numériques, mais le problème j'ai essyaé avec data[i].append(float(valeur[i])), mais il répond erreur(impossibel de convertir caractère en float).

Je veux commencer la lecture à partir le ligne 14, jai mets dans lecturedonnées(filename,131072,14), mais ça marche pas.
j'ai aussi une autre question, est ce que je peux définir la variable filename dans la fonction np.loadtxt, c'est-à-dire comme ça: pointage= ("filename",delimiter=';',skiprows=14)
Je vous remercie pour votre compréhension.
Je vous souhaite une excellente semaine.
0