IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Langage Perl Discussion :

supprimer un fichier


Sujet :

Langage Perl

  1. #1
    Membre émérite
    Avatar de Jasmine80
    Femme Profil pro
    Bioinformaticienne
    Inscrit en
    Octobre 2006
    Messages
    3 157
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 44
    Localisation : Royaume-Uni

    Informations professionnelles :
    Activité : Bioinformaticienne
    Secteur : Santé

    Informations forums :
    Inscription : Octobre 2006
    Messages : 3 157
    Points : 2 673
    Points
    2 673
    Par défaut supprimer un fichier
    Comment supprimer proprement un fichier?

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    	my $fich_fsa = 'P:/Theorie/YANN/Fadoua/mutation_seq/ref_ali/'.$id.'.fsa';
    	my $fich_msf = 'P:/Theorie/YANN/Fadoua/mutation_seq/ref_ali/'.$id.'.msf';
     
     
    	my @params = (	
     
    		'gapopen' => 15,
    		'PAIRGAP' => 0,
    		'ktuple' => 4, 
    		'type' => 'dna', 
    		'outfile' => $fich_msf, 
    		'format' => 'Fasta',
    		'outorder' => 'aligned',
    	);
     
    	# and pass the factory a reference to that array
    	my $factory = Bio::Tools::Run::Alignment::Clustalw->new(@params);
    	$factory->executable("C:/ClustalW2/clustalw2.exe");
     
     
    	my $aln = $factory->align($seq_array_ref);
     
    	# création du fichier fasta
    	my $in_msf  = Bio::AlignIO->new(-file => $fich_msf , -format => 'msf');
    	my $out_fsa = Bio::AlignIO->new(-file => ">".$fich_fsa , -format => 'fasta');
     
    	while ( $aln = $in_msf->next_aln() ) {
    	    $out_fsa->write_aln($aln);
    	}
     
    	close ($fich_fsa);
    	close ($fich_msf);
     
     
    	unlink ['P:/Theorie/YANN/Fadoua/mutation_seq/ref_ali/'.$id.'.msf'];
    J'utilise donc :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    	unlink ['P:/Theorie/YANN/Fadoua/mutation_seq/ref_ali/'.$id.'.msf'];
    J'ai essayé plus simplement :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    	my @file = ('P:/Theorie/YANN/Fadoua/mutation_seq/ref_ali/'.$id.'.msf');
     
    	unlink @file;
    mais ça ne va pas non plus.


    merci pour votre aide
    -- Jasmine --

  2. #2
    Membre actif
    Profil pro
    Inscrit en
    Avril 2010
    Messages
    221
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2010
    Messages : 221
    Points : 207
    Points
    207
    Par défaut
    Qu'as tu comme message d'erreur?

    avec ceci cela fonctionne parfaitement, le fichier est bien supprimé sans message d'erreur:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    my $file = "essai";
    unlink $file or die "Could not delete the file: $file\n";

  3. #3
    Membre émérite
    Avatar de Jasmine80
    Femme Profil pro
    Bioinformaticienne
    Inscrit en
    Octobre 2006
    Messages
    3 157
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 44
    Localisation : Royaume-Uni

    Informations professionnelles :
    Activité : Bioinformaticienne
    Secteur : Santé

    Informations forums :
    Inscription : Octobre 2006
    Messages : 3 157
    Points : 2 673
    Points
    2 673
    Par défaut
    Merci pour ta réponse

    ne faut-il pas un array en argument à unlink?


    Pour répondre à ta question, je n'avais aucun message d'erreur mais le fichier ne s'effaçait pas.

    Ton code ne fonctionne pas non plus, on entre dans le die.
    -- Jasmine --

  4. #4
    Responsable Perl et Outils

    Avatar de djibril
    Homme Profil pro
    Inscrit en
    Avril 2004
    Messages
    19 820
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Avril 2004
    Messages : 19 820
    Points : 498 771
    Points
    498 771
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    unlink @files or die "Could not delete the file(s) : $!\n";

  5. #5
    Expert confirmé

    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Avril 2009
    Messages
    3 577
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 58
    Localisation : France, Bas Rhin (Alsace)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Avril 2009
    Messages : 3 577
    Points : 5 753
    Points
    5 753
    Par défaut
    Citation Envoyé par djibril Voir le message
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    unlink @files or die "Could not delete the file(s) : $!\n";
    Attention, unlink retourne le nombre de fichiers supprimés, ainsi, si un seul fichier n'est pas supprimé dans la liste, le résultat de unlink ne sera pas faux, et le die n'aura pas lieu.

    Il serait donc préférable d'écrire :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    (unlink @files) != @files or die "Could not delete one or more files : $!\n";
    Plus j'apprends, et plus je mesure mon ignorance (philou67430)
    Toute technologie suffisamment avancée est indiscernable d'un script Perl (Llama book)
    Partagez vos problèmes pour que l'on partage ensemble nos solutions : je ne réponds pas aux questions techniques par message privé
    Si c'est utile, say

  6. #6
    Membre émérite
    Avatar de Jasmine80
    Femme Profil pro
    Bioinformaticienne
    Inscrit en
    Octobre 2006
    Messages
    3 157
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 44
    Localisation : Royaume-Uni

    Informations professionnelles :
    Activité : Bioinformaticienne
    Secteur : Santé

    Informations forums :
    Inscription : Octobre 2006
    Messages : 3 157
    Points : 2 673
    Points
    2 673
    Par défaut
    Citation Envoyé par Philou67430 Voir le message
    Attention, unlink retourne le nombre de fichiers supprimés, ainsi, si un seul fichier n'est pas supprimé dans la liste, le résultat de unlink ne sera pas faux, et le die n'aura pas lieu.

    Il serait donc préférable d'écrire :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    (unlink @files) != @files or die "Could not delete one or more files : $!\n";
    Ok merci

    Donc, je dois écrire :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    (unlink ['P:/Theorie/YANN/Fadoua/mutation_seq/ref_ali/'.$id.'.msf']) or print "Could not delete the file: $id\n";
    -- Jasmine --

  7. #7
    Membre actif
    Profil pro
    Inscrit en
    Avril 2010
    Messages
    221
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2010
    Messages : 221
    Points : 207
    Points
    207
    Par défaut
    dans ton cas tu n'a pas de tableau écrit plutôt:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    unlink ('P:/Theorie/YANN/Fadoua/mutation_seq/ref_ali/'.$id.'.msf') or print "Could not delete the file: $id\n";
    Attention il faut les parenthèse et non des crochet pour la fonction unlink

  8. #8
    Expert confirmé

    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Avril 2009
    Messages
    3 577
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 58
    Localisation : France, Bas Rhin (Alsace)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Avril 2009
    Messages : 3 577
    Points : 5 753
    Points
    5 753
    Par défaut
    Dans ton cas, Jasmine, tu ne souhaites supprimer qu'un fichier, nul besoin de mettre une liste. Tu peux donc écrire :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    unlink 'P:/Theorie/YANN/Fadoua/mutation_seq/ref_ali/'.$id.'.msf' or print "Could not delete the file: $id\n";
    Plus j'apprends, et plus je mesure mon ignorance (philou67430)
    Toute technologie suffisamment avancée est indiscernable d'un script Perl (Llama book)
    Partagez vos problèmes pour que l'on partage ensemble nos solutions : je ne réponds pas aux questions techniques par message privé
    Si c'est utile, say

  9. #9
    Membre émérite
    Avatar de Jasmine80
    Femme Profil pro
    Bioinformaticienne
    Inscrit en
    Octobre 2006
    Messages
    3 157
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 44
    Localisation : Royaume-Uni

    Informations professionnelles :
    Activité : Bioinformaticienne
    Secteur : Santé

    Informations forums :
    Inscription : Octobre 2006
    Messages : 3 157
    Points : 2 673
    Points
    2 673
    Par défaut
    Citation Envoyé par Philou67430 Voir le message
    Dans ton cas, Jasmine, tu ne souhaites supprimer qu'un fichier, nul besoin de mettre une liste. Tu peux donc écrire :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    unlink 'P:/Theorie/YANN/Fadoua/mutation_seq/ref_ali/'.$id.'.msf' or print "Could not delete the file: $id\n";

    D'accord, merci, je pensais qu'avec le or, il fallait des parenthèses (unlink '...') or print
    -- Jasmine --

  10. #10
    Membre émérite
    Avatar de Jasmine80
    Femme Profil pro
    Bioinformaticienne
    Inscrit en
    Octobre 2006
    Messages
    3 157
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 44
    Localisation : Royaume-Uni

    Informations professionnelles :
    Activité : Bioinformaticienne
    Secteur : Santé

    Informations forums :
    Inscription : Octobre 2006
    Messages : 3 157
    Points : 2 673
    Points
    2 673
    Par défaut
    je ferme le fichier ouvert en lecture, puis j'essaie de le supprimer :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    	close ($fich_msf);	
     
    	unlink $fich_msf or print $out_file_log "Could not delete the file: $id\t$!\n";
    mais j'obtiens le message :
    Could not delete the file: TEM_souche_A Permission denied
    -- Jasmine --

  11. #11
    Expert confirmé

    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Avril 2009
    Messages
    3 577
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 58
    Localisation : France, Bas Rhin (Alsace)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Avril 2009
    Messages : 3 577
    Points : 5 753
    Points
    5 753
    Par défaut
    Je doute que $fich_msf soit un nom de fichier s'il est utilisé dans close (mais un file handle). Or, unlink n'accepte que des noms de fichiers.
    Plus j'apprends, et plus je mesure mon ignorance (philou67430)
    Toute technologie suffisamment avancée est indiscernable d'un script Perl (Llama book)
    Partagez vos problèmes pour que l'on partage ensemble nos solutions : je ne réponds pas aux questions techniques par message privé
    Si c'est utile, say

  12. #12
    Membre émérite
    Avatar de Jasmine80
    Femme Profil pro
    Bioinformaticienne
    Inscrit en
    Octobre 2006
    Messages
    3 157
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 44
    Localisation : Royaume-Uni

    Informations professionnelles :
    Activité : Bioinformaticienne
    Secteur : Santé

    Informations forums :
    Inscription : Octobre 2006
    Messages : 3 157
    Points : 2 673
    Points
    2 673
    Par défaut
    Voici le code en entier

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    	my $seq_array_ref = $_[0];
    	my $id = $_[1];
     
    	my $fich_fsa = 'P:/Theorie/YANN/Fadoua/mutation_seq/ref_ali/'.$id.'.fsa';
    	my $fich_msf = 'P:/Theorie/YANN/Fadoua/mutation_seq/ref_ali/'.$id.'.msf';
     
     
    	my @params = (	
     
    		'gapopen' => 15,
    		'PAIRGAP' => 0,
    		'ktuple' => 4, 
    		'type' => 'dna', 
    		'outfile' => $fich_msf, 
    		'format' => 'Fasta',
    		'outorder' => 'aligned',
    	);
     
    	# and pass the factory a reference to that array
    	my $factory = Bio::Tools::Run::Alignment::Clustalw->new(@params);
    	$factory->executable("C:/ClustalW2/clustalw2.exe");
     
     
    	my $aln = $factory->align($seq_array_ref);
     
    	# création du fichier fasta
    	my $in_msf  = Bio::AlignIO->new(-file => $fich_msf , -format => 'msf');
    	my $out_fsa = Bio::AlignIO->new(-file => ">".$fich_fsa , -format => 'fasta');
     
    	while ( $aln = $in_msf->next_aln() ) {
    	    $out_fsa->write_aln($aln);
    	}
     
    	close ($fich_fsa);
    	close ($fich_msf);
     
     
    	unlink $fich_msf or print $out_file_log "Could not delete the file: $id\t$!\n";
    les close() sont inutiles car je crois que le module Bio::AlignIO ferme les fichiers. Je les ai supprimés mais ça ne change rien à l'erreur.
    -- Jasmine --

  13. #13
    Expert confirmé

    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Avril 2009
    Messages
    3 577
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 58
    Localisation : France, Bas Rhin (Alsace)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Avril 2009
    Messages : 3 577
    Points : 5 753
    Points
    5 753
    Par défaut
    OK, cela vient donc probablement des droits par défaut que ton système d'exploitation attribue à la création d'un nouveau fichier.
    Ces droits sont modifiables sous Linux avec la commande umask. Cette commande est également disponible en perl, sous le même nom (voir la doc).
    Plus j'apprends, et plus je mesure mon ignorance (philou67430)
    Toute technologie suffisamment avancée est indiscernable d'un script Perl (Llama book)
    Partagez vos problèmes pour que l'on partage ensemble nos solutions : je ne réponds pas aux questions techniques par message privé
    Si c'est utile, say

  14. #14
    Membre émérite
    Avatar de Jasmine80
    Femme Profil pro
    Bioinformaticienne
    Inscrit en
    Octobre 2006
    Messages
    3 157
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 44
    Localisation : Royaume-Uni

    Informations professionnelles :
    Activité : Bioinformaticienne
    Secteur : Santé

    Informations forums :
    Inscription : Octobre 2006
    Messages : 3 157
    Points : 2 673
    Points
    2 673
    Par défaut
    Merci, je vais y regarder. Je suis sous windows et en tant qu'administrateur, ne peut-on pas changer ce droit par défaut?

    umask() sous perl s'utilise à l'ouverture du fichier? Comment faire dans mon cas où le module ouvrant le fichier est Bio::Tools::Run::Alignment::Clustalw
    -- Jasmine --

  15. #15
    Expert confirmé

    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Avril 2009
    Messages
    3 577
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 58
    Localisation : France, Bas Rhin (Alsace)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Avril 2009
    Messages : 3 577
    Points : 5 753
    Points
    5 753
    Par défaut
    Désolé de ne pouvoir t'aider, je ne connais pas du tout la gestion des droits sous Windows.

    Cela dit, il est aussi possible que le fichier soit encore ouvert par le module bioperl lui-même, tant que tous les objets bio-perl sont encore référencés... Mais bon, je n'en sais trop rien, désolé.
    Plus j'apprends, et plus je mesure mon ignorance (philou67430)
    Toute technologie suffisamment avancée est indiscernable d'un script Perl (Llama book)
    Partagez vos problèmes pour que l'on partage ensemble nos solutions : je ne réponds pas aux questions techniques par message privé
    Si c'est utile, say

  16. #16
    Membre émérite
    Avatar de Jasmine80
    Femme Profil pro
    Bioinformaticienne
    Inscrit en
    Octobre 2006
    Messages
    3 157
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 44
    Localisation : Royaume-Uni

    Informations professionnelles :
    Activité : Bioinformaticienne
    Secteur : Santé

    Informations forums :
    Inscription : Octobre 2006
    Messages : 3 157
    Points : 2 673
    Points
    2 673
    Par défaut
    Citation Envoyé par Philou67430 Voir le message
    Désolé de ne pouvoir t'aider, je ne connais pas du tout la gestion des droits sous Windows.

    Cela dit, il est aussi possible que le fichier soit encore ouvert par le module bioperl lui-même, tant que tous les objets bio-perl sont encore référencés... Mais bon, je n'en sais trop rien, désolé.

    Je vais chercher et si je trouve, je te dis quoi
    -- Jasmine --

  17. #17
    Membre émérite
    Avatar de Jasmine80
    Femme Profil pro
    Bioinformaticienne
    Inscrit en
    Octobre 2006
    Messages
    3 157
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 44
    Localisation : Royaume-Uni

    Informations professionnelles :
    Activité : Bioinformaticienne
    Secteur : Santé

    Informations forums :
    Inscription : Octobre 2006
    Messages : 3 157
    Points : 2 673
    Points
    2 673
    Par défaut
    J'ai trouvé une solution


    Script
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
     
    CORE
     
     
    while ( my $seq = $in->next_seq() ) {
     
          ...
          ...
          ...
          &ClustalW2 ([ $seq, $seqobj_ref], $seq->primary_id );
          ...
          ...
    }
     
    my @msf_files = grep { !/^\.\.?$/ } glob($rep.'/ref_ali/*.msf');
    (unlink @msf_files) != @msf_files or print $out_file_log "Could not delete the file\t$!\n";
     
     
     
     
     
     
    sub ClustalW2 {
     
              ....
     
    	close($fich_msf);
    	close($fich_fsa);
     
     
    }

    Au lieu d'effacer les fichiers un à un à la fin du sous-programme ClustalW2, je les efface tous d'un coup à la fin du script principal. Probablement que les fichiers ne sont pas fermés via le close().
    -- Jasmine --

Discussions similaires

  1. [VB.NET] Comment supprimer un fichier qui est utilisé ?
    Par Toon94 dans le forum Windows Forms
    Réponses: 12
    Dernier message: 13/06/2010, 12h59
  2. [cvs] supprimer un fichier
    Par ed_hunter dans le forum Eclipse Java
    Réponses: 4
    Dernier message: 27/03/2007, 18h17
  3. Supprimer plusieurs fichiers...
    Par Thierry8 dans le forum Langage
    Réponses: 3
    Dernier message: 16/07/2005, 11h43
  4. Comment supprimer des fichiers en nombre ?
    Par Didier L dans le forum API, COM et SDKs
    Réponses: 13
    Dernier message: 25/01/2005, 16h01
  5. Supprimer un fichier par rapport a une date
    Par NewB dans le forum Linux
    Réponses: 2
    Dernier message: 25/06/2003, 13h44

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo