Je viens vers vous pour avoir quelques conseils sur ce que j'essaie de mettre en place avec le python :
Je vais essayer d'être le plus précis et de détailler comme je peux ce que j'essaie de faire !
J'ai fais un script en bash qui me permet de traiter mes fichiers csv. A partir d'un fichier csv contenant certains mots qui me servent de " clés ", je check deux autres fichiers csv. Pour exemple, voici les trois fichiers csv que je mets en arguments quand je lance mon script :
Mon script analyse fichier2.csv et fichier3.csv, il extrait les lignes en fonction des mots clés présents dans fichier1.csv puis génère un fichier4.csv avec les lignes trouvées dans le fichier2.csv puis un fichier5.csv pour le fichier3.csv. :
Mes fichiers CSV sont tous identiques dans leur forme, seul le contenu change. Ils ont tous 18 colonnes, mais seulement 4 d'entres elles m'intéressent, j'utilise donc un awk pour récupérer les 4 colonnes désirées.
Donc pour résumer : dans fichier4.csv et fichier5.csv, on retrouve exactement les mêmes colonnes, dans le même ordre. Il y a juste deux colonnes qui séparent chaque les fichhiers histoire que ce soit plus lisible.
Dans les fichiers fusionnés, il y a une colonne qu'avec des valeurs numérique. Il faut imaginer que, par exemple, mes colonnes avec les valeurs numériques soient la première colonne du fichier4.csv et la première colonne du Fichier5.csv Mon scrit va extraire ces deux colonnes, va faire un fichier csv pour chaque colonne, va soustraire les colonnes entre elles et refaire un autre fichier résultat.csv.
Il va ensuite fusionner fichier_csv_final1.csv avec le fichier resultat.csv. Au final, mon script génère un fichier qui ressemble à ça :
Ça, j'arrive à le faire en bash. En étant sous Linux, ça marche niquel pour moi. Le problème, c'est que je dois le rendre compatible avec Windows. Du coup j'ai décidé de le faire en Python.
D'où mes questions :
- En bash j'utlise une bouche while read de ce type pour prendre que les 4 colonnes qui m'intéressent et filtrer les lignes en fonction des mots clé qui sont dans mon premier fichier csv :
while read jour
do
awk -F',' '{print $1","$2","$15","$17}' "$2" | grep -w "$jour"
echo""
echo""
done <"$1" >"$3"
L'avantage c'est que ça me permet de traiter deux fichiers en même temps :
Pourriez-vous m'indiquer l'équivalent en Python ? J'ai beau chercher, je ne trouve pas !
Pour le moment, j'arrive à faire cela :
import csv
with open('Fichier1.csv') as csv_file:
csv_reader = csv.reader(csv_file)
for line in csv_reader:
print(line[0], line[1], line[2], line[14], line[16])
Ce qui me permet de ne garder que les 4 colonnes dont j'ai besoin, mais il me manque le fait de pouvoir filtrer les lignes de mes fichiers.csv en fonction de valeur clé, présentent dans un autre fichier csv.
Je précise que je suis sous RedHat et que j'utilise la version 2.7.5 de python. Merci d'avance et pardon pour le gros poste !
- Edité par Tyza 22 mars 2019 à 15:14:47
TicTacToe ( ou Morpion ) en bash avec un tableau multi-dimension : ici ! :)
Tu peux d'abord ouvrir le premier fichier pour récupérer les mots clés.
Ensuite tu crée un nouveau fichier avec csv.writer, puis tu écris seulement les lignes qui correspondent.
Exemple (non testé) :
import csv
with open("fichier1.csv") as f:
reader = csv.reader(f)
mots_cles = {line[0] for line in reader}
print(mots_cles)
with open("fichier_final.csv", "w") as f:
writer = csv.writer(f)
for filename in ["fichier1.txt", "fichier2.txt"]:
with open(filename) as file:
reader = csv.reader(file)
for line in reader:
if line[3] in mots_cles:
writer.writerow(line)
Au fait pourquoi tu n'utilises pas python3 ?
- Edité par thelinekioubeur 22 mars 2019 à 15:40:05
J'ai suivi le guide d'installation sur le site de RedHat, mais rien n'y fait, je ne peux pas installer Python3. Je pense que ma boîte bloque l'installation.
Je vais voir avec eux !
TicTacToe ( ou Morpion ) en bash avec un tableau multi-dimension : ici ! :)
Il semblerait que quand je tente ta proposition, la console de sublime texte ne me renvoie que la liste des mot clés présent dans le premier fichier csv que j'ouvre !
Je vais peut-être regarder du côté de Panda ! Apparemment c'est fait pour traiter ce genre de chose !
TicTacToe ( ou Morpion ) en bash avec un tableau multi-dimension : ici ! :)
Vu tes bases en python pour lire de simples fichiers texte, autant dire que ça risque d'être plus que périlleux en utilisant une usine à gaz comme pandas.
Si encore on avait pu comprendre ton besoin, on pourrait sans doute te guider, mais avoir à créer je ne sais combien de fichiers afin d'arriver à un fichier final, ça sent tellement la mauvaise conception que je ne m'y aventurerai pas. Tout cela pars déjà du bash où certainement une solution autre, pourrait être trouvé pour que toutes les infos se trouvent sur un seul fichier csv.
À moins d'exprimer mieux le problème, je vois pas comment t'aider, sinon te conseiller de rendre moins complexe ta résolution au problème (algorithme).
Celui qui trouve sans chercher est celui qui a longtemps cherché sans trouver.(Bachelard) La connaissance s'acquiert par l'expérience, tout le reste n'est que de l'information.(Einstein)
Je suis apprentie au sein d'un opérateur de télécommunications. Ma misions principale est de lire 3 fichiers .csv via un script en python et pour ensuite les relier en un seul fichier .csv. Pourrais-je savoir comment faire la fusion de ses trois fichiers .csv ?
TicTacToe ( ou Morpion ) en bash avec un tableau multi-dimension : ici ! :)
TicTacToe ( ou Morpion ) en bash avec un tableau multi-dimension : ici ! :)
TicTacToe ( ou Morpion ) en bash avec un tableau multi-dimension : ici ! :)
Celui qui trouve sans chercher est celui qui a longtemps cherché sans trouver.(Bachelard)
La connaissance s'acquiert par l'expérience, tout le reste n'est que de l'information.(Einstein)