Contenu | Rechercher | Menus

Annonce

Si vous avez des soucis pour rester connecté, déconnectez-vous puis reconnectez-vous depuis ce lien en cochant la case
Me connecter automatiquement lors de mes prochaines visites.

À propos de l'équipe du forum.

#1 Le 15/07/2015, à 20:24

Orang utan

[RESOLU] Script pour remplacer script python

Bonjour,
je donne d'abord la situation pour éclairer.
Au travail, nous avons 4 anémomètres qui génèrent 4 fichiers de relevés journaliers au format csv, ainsi :
Date; Heure; Direction; Vitesse; Rafale
On se retrouve avec par exemple pour le premier anémomètre :
Date1fichier1
Date2fichier1
Date3fichier1
et pour le 2éme :
Date1fichier2
Date2fichier2
Date3fichier2
ect...
Le but est de concaténer le tout en un seul fichier csv de tel façon (verticalement et horizalement) :
Date1fichier1 Date1fichier2 Date1fichier3 Date1fichier4
Date2fichier1 Date2fichier2 Date2fichier3 Date2fichier4
Date3fichier1 Date3fichier2 Date3fichier3 Date3fichier4
...
J'ai donc fait un fichier .sh avec la commande cat :
cat *fichier1.csv
cat *fichier2.csv
cat *fichier3.csv
cat *fichier4.csv
pour la concaténation verticale et obtient 4 fichier csv.
Pour la concaténation horizontale de ces 4 fichiers,
c'est python qui s'en occupe (je suis débutant), voici le code :

ffinal = open('essais.csv', 'w')
fsource1 = open('fichier1.csv','r')
fsource2 = open('fichier2.csv','r')
fsource3 = open('fichier3.csv','r')
fsource4 = open('fichier4.csv','r')
for j in fsource1:
    if j == "Date;Heure;Direction;Vitesse;Rafale\n":
        texte = j [0:-1]+";"+fsource2.readline()[10:-1]+";"+fsource3.readline()[10:-1]+";"+fsource4.readline()[10:]
        ffinal.write(texte)
    else:    
        texte = j [0:-1]+";"+fsource2.readline()[19:-1]+";"+fsource3.readline()[19:-1]+";"+fsource4.readline()[19:]
        ffinal.write(texte)
fsource1.close()
fsource2.close()
fsource3.close()
fsource4.close()
ffinal.close()

Au passage, je vire les 2 premières colonnes des fichiers 2 3 et 4, et met une colonne vide entre.

Problème, les pc du boulot sont sous 7, et n'ont pas python d'installé.
Donc est-il possible d'obtenir la même chose que ce que donne python, en ligne de commande ?

Dernière modification par Orang utan (Le 18/07/2015, à 01:50)


Le mensonge donne des fleurs, jamais de fruits (proverbe africain)

Hors ligne

#2 Le 15/07/2015, à 20:43

jplemoine

Re : [RESOLU] Script pour remplacer script python

Je pense que l'on doit pouvoir faire tourner du python sous Windows...


Membre de l'ALDIL (Association Lyonnaise pour le Développement de l'Informatique Libre)
- En pro, après 20 ans de développement, administrateur Linux / Unix depuis Avril 2019.
- En privé, sous Ubuntu-Xubuntu depuis 2009.

Hors ligne

#3 Le 15/07/2015, à 21:21

pingouinux

Re : [RESOLU] Script pour remplacer script python

Bonsoir,
Effectivement, python tourne aussi sous Windows.
Jette un œil à la commande paste (ça ne va pas faire exactement ce que tu veux, mais tu pourras adapter) :

paste fichier[1234].csv

Édité : Je ne suis pas sûr d'avoir bien compris. Pourrais-tu donner un exemple concret ?

Dernière modification par pingouinux (Le 15/07/2015, à 21:31)

Hors ligne

#4 Le 15/07/2015, à 22:03

MicP

Re : [RESOLU] Script pour remplacer script python

Comme toujours, Il faudrait un extrait représentatif du contenu de ces 4 fichiers et du résultat demandé.

Hors ligne

#5 Le 16/07/2015, à 09:17

Orang utan

Re : [RESOLU] Script pour remplacer script python

jplemoine a écrit :

Je pense que l'on doit pouvoir faire tourner du python sous Windows...

Je n'ai aucun doute sur la question, encore faut-il avoir les droits admin et surtout l'autorisation du service informatique de la boite.



Les fichiers ont cette forme :

Date;Heure;Direction;Vitesse;Rafale
02/04/2013;00:00:00;48,0;12,7;14,8
02/04/2013;00:02:00;49,0;13,2;16,1
02/04/2013;00:04:00;51,0;14,1;17,3
...

Au final j'obtiens cela :

Date;Heure;Direction;Vitesse;Rafale;;Direction;Vitesse;Rafale;;Direction;Vitesse;Rafale;;Direction;Vitesse;Rafale
02/04/2013;00:00:00;48,0;12,7;14,8;;50,0;12,7;14,8;;48,0;12,7;14,8;;43,0;11,7;15,8
02/04/2013;00:02:00;49,0;13,2;16,1;;49,0;13,2;16,1;;49,0;13,2;16,1;;49,0;13,2;16,1
02/04/2013;00:04:00;51,0;14,1;17,3;;52,0;14,2;16,2;;50,0;13,6;16,1;;49,0;15,0;18,3
...

Le mensonge donne des fleurs, jamais de fruits (proverbe africain)

Hors ligne

#6 Le 17/07/2015, à 14:08

MicP

Re : [RESOLU] Script pour remplacer script python

En mode brut, car si les fichiers sont gros, il vaudra mieux optimiser tout ça (et il y a des personne beaucoup plus compétentes que moi ici smile )

Donc, attends leurs retours, ça sera sûrement beaucoup plus fin que ça.

michel@debG53SW:~/monTest$ cat fich_1.csv
Date;Heure;Direction;Vitesse;Rafale
02/04/2013;00:00:00;48,0;12,7;14,8
02/04/2013;00:02:00;49,0;13,2;16,1
02/04/2013;00:04:00;51,0;14,1;17,3
michel@debG53SW:~/monTest$ cat fich_2.csv
Date;Heure;Direction;Vitesse;Rafale
02/04/2013;00:00:00;50,0;12,7;14,8
02/04/2013;00:02:00;49,0;13,2;16,1
02/04/2013;00:04:00;52,0;14,2;16,2
michel@debG53SW:~/monTest$ cat fich_3.csv
Date;Heure;Direction;Vitesse;Rafale
02/04/2013;00:00:00;48,0;12,7;14,8
02/04/2013;00:02:00;49,0;13,2;16,1
02/04/2013;00:04:00;50,0;13,6;16,1
michel@debG53SW:~/monTest$ cat fich_4.csv
Date;Heure;Direction;Vitesse;Rafale
02/04/2013;00:00:00;43,0;11,7;15,8
02/04/2013;00:02:00;49,0;13,2;16,1
02/04/2013;00:04:00;49,0;15,0;18,3
michel@debG53SW:~/monTest$ 
michel@debG53SW:~/monTest$ repTemp="$(mktemp -d --suffix=_dataConv_${USER})"
michel@debG53SW:~/monTest$ cp fich_1.csv  "$repTemp"/
michel@debG53SW:~/monTest$ awk -F";" '{print ";;"$3";"$4";"$5}' fich_2.csv > "$repTemp"/fichTMP_2.csv
michel@debG53SW:~/monTest$ awk -F";" '{print ";;"$3";"$4";"$5}' fich_3.csv > "$repTemp"/fichTMP_3.csv
michel@debG53SW:~/monTest$ awk -F";" '{print ";;"$3";"$4";"$5}' fich_4.csv > "$repTemp"/fichTMP_4.csv
michel@debG53SW:~/monTest$ listeFichs=$(ls "${repTemp}"/*.*)
michel@debG53SW:~/monTest$ paste -d "" $listeFichs > fichPaste_1234.csv && rm $listeFichs && rmdir "${repTemp}"
michel@debG53SW:~/monTest$ cat fichPaste_1234.csv
Date;Heure;Direction;Vitesse;Rafale;;Direction;Vitesse;Rafale;;Direction;Vitesse;Rafale;;Direction;Vitesse;Rafale
02/04/2013;00:00:00;48,0;12,7;14,8;;50,0;12,7;14,8;;48,0;12,7;14,8;;43,0;11,7;15,8
02/04/2013;00:02:00;49,0;13,2;16,1;;49,0;13,2;16,1;;49,0;13,2;16,1;;49,0;13,2;16,1
02/04/2013;00:04:00;51,0;14,1;17,3;;52,0;14,2;16,2;;50,0;13,6;16,1;;49,0;15,0;18,3
michel@debG53SW:~/monTest$ 

EDIT :  Je viens de modifier un peu mon script afin qu'il utilise le répertoire "/tmp" qui est prévu pour ça.

S'il y avait plus de 4 fichiers de données, un boucle serait possible :

michel@debG53SW:~/monTest$ nbrFichData=4
michel@debG53SW:~/monTest$ repTemp="$(mktemp -d --suffix=_dataConv_${USER})"
michel@debG53SW:~/monTest$ cp fich_1.csv "${repTemp}"/
michel@debG53SW:~/monTest$ for ((idx=2; idx<=$nbrFichData; idx++)) do awk -F";" '{print ";;"$3";"$4";"$5}' fich_$idx.csv > "${repTemp}"/fich_tmp_$idx.csv; done
michel@debG53SW:~/monTest$ listeFichs=$(ls "${repTemp}"/*.*)
michel@debG53SW:~/monTest$ paste -d "" $listeFichs > fichPasteData.csv && rm $listeFichs && rmdir "${repTemp}"
michel@debG53SW:~/monTest$ cat fichPasteData.csv
Date;Heure;Direction;Vitesse;Rafale;;Direction;Vitesse;Rafale;;Direction;Vitesse;Rafale;;Direction;Vitesse;Rafale
02/04/2013;00:00:00;48,0;12,7;14,8;;50,0;12,7;14,8;;48,0;12,7;14,8;;43,0;11,7;15,8
02/04/2013;00:02:00;49,0;13,2;16,1;;49,0;13,2;16,1;;49,0;13,2;16,1;;49,0;13,2;16,1
02/04/2013;00:04:00;51,0;14,1;17,3;;52,0;14,2;16,2;;50,0;13,6;16,1;;49,0;15,0;18,3
michel@debG53SW:~/monTest$ 

Dernière modification par MicP (Le 17/07/2015, à 14:24)

Hors ligne

#7 Le 17/07/2015, à 16:11

Orang utan

Re : [RESOLU] Script pour remplacer script python

Je te remercie,
je rencontre un pb, c'est que des fichiers ont un accent, dans un répertoire avec un accent :
.\JeéteEst\xxxx-xx-xx_JetéeEst.csv  (xxxx-xx-xx c'est la date)

La commande suivante dans le terminal fonctionne :
copy .\JetéeEst\*JetéeEst.csv JeteeEst.csv
La même commande dans un .bat ne fonctionne pas.
J'ai remplacé le "é" par ? ou *, même effet.

[EDIT] cancel my last, j'ai trouvé la conversion, je te remercie encore.

Puisque j'y suis, une référence pour un livre sur le sujet des lignes de commandes (DOS et UNIX) s'adressant aux débutants ?

Dernière modification par Orang utan (Le 17/07/2015, à 16:23)


Le mensonge donne des fleurs, jamais de fruits (proverbe africain)

Hors ligne

#8 Le 17/07/2015, à 19:52

MicP

Re : [RESOLU] Script pour remplacer script python

Orang utan a écrit :


copy .\JetéeEst\*JetéeEst.csv JeteeEst.csv
La même commande dans un .bat ne fonctionne pas.
.…

Je suppose que tu avais pensé à changer les "/" par "\" dans la ligne de commande..

=======
Pour les .BAT, ça fait tellement longtemps que je n'ai pas touché aux .BAT (et à windows d'ailleurs) que je ne saurais pas quoi te recommander.

=======
Pour le Bash : Introduction à la programmation en Bash (Eric sanschis - IUT Rodez) (il y a un lien vers un fichier PDF si tu veux te l'imprimer)
Même si quelques commandes utilisées datent un peu, j'ai trouvé ce document très bien fait.

Un autre : Guide avancé d'écriture des scripts Bash

Un autre lien vers pleins de liens toujours à jour : Bash Hackers Wiki Frontpage

=======
Une petite note personnelle au sujet du "bash" (et autres scripts) : Au début de mon apprentissage Linux, j'ai réalisé beaucoup de scripts qui ne servaient à rien car au final, je me rendais compte que les fonctionnalités que je cherchais à ajouter à certaines commandes existaient déjà big_smile Mais cela m'a fait parcourir pas mal de documentation, donc ce n'est jamais du temps perdu, et du coup, j'ai appris à lire les pages du man de toutes les commandes à mesure que je les découvre, et y reviens souvent, surtout quand il s'agit d'utiliser ces commandes dans un script.
Parfois, on se rends compte qu'une simple option résous tous les problèmes, mais comme on ne l'avait jamais utilisée, on avait complètement oublié son existence.

Dernière modification par MicP (Le 17/07/2015, à 23:09)

Hors ligne

#9 Le 18/07/2015, à 00:40

Orang utan

Re : [RESOLU] Script pour remplacer script python

Encore merci, tu es bien urbain. smile

Dernière modification par Orang utan (Le 18/07/2015, à 00:40)


Le mensonge donne des fleurs, jamais de fruits (proverbe africain)

Hors ligne

#10 Le 18/07/2015, à 09:55

MicP

Re : [RESOLU] Script pour remplacer script python

smile

Hors ligne

#11 Le 18/07/2015, à 14:20

MicP

Re : [RESOLU] Script pour remplacer script python

Paquetage abs-guide => The Advanced Bash-Scripting Guide

=======
Paquetage : manpages-posix => Manual pages about using POSIX system

https://fr.wikipedia.org/wiki/POSIX
http://pubs.opengroup.org/onlinepubs/96 … tents.html

Hors ligne