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

Python Discussion :

Créer un fichier autre que dans le répertoire courant


Sujet :

Python

  1. #1
    Membre averti Avatar de nekcorp
    Homme Profil pro
    Étudiant
    Inscrit en
    Décembre 2006
    Messages
    592
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Décembre 2006
    Messages : 592
    Points : 383
    Points
    383
    Par défaut Créer un fichier autre que dans le répertoire courant
    Bonjour,

    Je suis sur un petit programme dans lequel je créé des fichiers temporaires. J'ai donc créé un répertoire à l'aide de ce code :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    rep = os.path.dirname(os.path.abspath(__file__))
    try:
        os.mkdir(rep+"/Temp")
    except OSError:
        pass
    Je récupère le chemin du dossier dans lequel j'ai mon script python pour ensuite créé mon dossier Temp dans ce même dossier.

    Mon problème est lorsque je souhaite écrire mes fichiers temporaires dans ce répertoire Temp :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    temp_file.write(ligne.lstrip())
    Avec ce code pas de soucis le fichier s'écrit bien, mais à la racine et non pas dans mon dossier Temp (jusque la tout es normal)

    J'ai donc voulu concatener mon rep + Temp comme ceci :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    temp_file.write(rep+"/Temp3+ligne.lstrip())
    Mais ça ne marche pas.

    Je me suis donc dit que plutôt d'écrire dans le répertoire Temp, fallait bien créer le fichier dans le bon répertoire dans un premier temps et j'ai donc réitérer la concatenation mais dans le open :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    temp_file=open(rep+"/Temp"+"temp_"+file,"w")
    Mais la aussi ça ne fonctionne pas.

    Une idée ?

    Merci de votre aide

  2. #2
    Expert éminent

    Homme Profil pro
    Inscrit en
    Octobre 2008
    Messages
    4 302
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations forums :
    Inscription : Octobre 2008
    Messages : 4 302
    Points : 6 782
    Points
    6 782
    Par défaut
    Salut,

    Il est préférable d'utiliser os.path.join() pour créer les chemin/nom de fichier.

    write() est une méthode d'objet fichier et tu dois d'abord ouvrir ce fichier, en écriture dans ce cas ci.

    Deux façons de faire:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     
    fname = os.path.join(rep, "tmpfile")
    outf = open(fname, "w")
    try:
        outf.write(ligne)
    except (IOError, OSError) as why:
        print why
    outf.close()
    c'est toi qui dois fermer le fichier

    ou avec l'instruction with:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    with open(fname, "w") as outf:
        try:
            outf.write(ligne)
        except (IOError, OSError) as why:
            print why
    ici il ne faut pas fermer le fichier, Python s'en chargera, y compris en cas d'erreur.

  3. #3
    Membre émérite
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Janvier 2010
    Messages
    553
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Industrie

    Informations forums :
    Inscription : Janvier 2010
    Messages : 553
    Points : 2 739
    Points
    2 739
    Par défaut
    Salut,

    je crois qu'il manque le slash en gras/rouge dans la ligne suivante:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    temp_file=open(rep+"/Temp/"+"temp_"+file,"w")
    mais comme dit VinsS, vaut mieux passer par os.path.join() pour construire des chemins, ça évite ce genre d'oublis et surtout c'est plus portable.

  4. #4
    Expert éminent
    Avatar de tyrtamos
    Homme Profil pro
    Retraité
    Inscrit en
    Décembre 2007
    Messages
    4 478
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Var (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Retraité

    Informations forums :
    Inscription : Décembre 2007
    Messages : 4 478
    Points : 9 278
    Points
    9 278
    Billets dans le blog
    6
    Par défaut
    Bonjour,

    A noter qu'il existe un module livré avec Python qui s'appelle "tempfile", qui permet de trouver le répertoire temporaire prévu par l'OS (gettempdir()), et de créer tout fichier ou répertoire temporaire. Pour les fichiers, il est généré un nom unique, et le fichier est détruit par défaut à sa fermeture: c'est très pratique.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    tempfile.NamedTemporaryFile([mode='w+b'[, bufsize=-1[, suffix=''[, prefix='tmp'[, dir=None[, delete=True]]]]]])

  5. #5
    Expert éminent sénior
    Avatar de Sve@r
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Février 2006
    Messages
    12 721
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Oise (Picardie)

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

    Informations forums :
    Inscription : Février 2006
    Messages : 12 721
    Points : 31 044
    Points
    31 044
    Billets dans le blog
    1
    Par défaut
    Bonjour
    Citation Envoyé par VinsS Voir le message
    Il est préférable d'utiliser os.path.join() pour créer les chemin/nom de fichier.
    Chouette fonction. Je ne la connaissais pas. Moi je faisais dir="rep1%srep2%rep3" % (os.sep, os.sep). Bon c'est déjà bien que j'avais pris en compte le séparateur inhérent à l'os mais celle-là le fait aussi et plus encore.

    Tout à l'heure j'ai repris tous mes sources où j'avais utilisé os.sep et ai réécrit les instructions en utilisant os.path.join()...

  6. #6
    Membre averti Avatar de nekcorp
    Homme Profil pro
    Étudiant
    Inscrit en
    Décembre 2006
    Messages
    592
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Décembre 2006
    Messages : 592
    Points : 383
    Points
    383
    Par défaut
    Merci impeccable, problème résolut avec os.path.join().

    Merci pour précision tyrtamos

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    tempfile.NamedTemporaryFile([mode='w+b'[, bufsize=-1[, suffix=''[, prefix='tmp'[, dir=None[, delete=True]]]]]])
    Je n'ai pas encore testé mais ça ne devrait pas tarder pour la suite de mon programme

    Encore merci à tous

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Intégrer une image HTML enregistrée autre part que dans un répertoire du projet
    Par bilbonec dans le forum Balisage (X)HTML et validation W3C
    Réponses: 2
    Dernier message: 20/11/2012, 16h11
  2. [XL-2010] Impossible de travailler dans fichier autre que .xlsx
    Par Tatan62 dans le forum Macros et VBA Excel
    Réponses: 1
    Dernier message: 17/02/2012, 11h48
  3. [XL-2010] Créer 1 fichier xls à enregistrer dans un répertoire "relatif"
    Par olo-rsv-R dans le forum Macros et VBA Excel
    Réponses: 2
    Dernier message: 07/06/2011, 23h44
  4. [FPDF] créer un fichier PDF dans le répertoire courant
    Par patdez dans le forum Bibliothèques et frameworks
    Réponses: 2
    Dernier message: 09/10/2005, 15h37
  5. Réponses: 12
    Dernier message: 27/06/2005, 19h06

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