Précédent   Forum du club des développeurs et IT Pro > Autres langages > Python & Zope > Général Python
Général Python Forum d'entraide sur les fondamentaux du langage Python, syntaxe, POO, bibliothèque standard, ...
Partagez cette discussion sur d'autres réseaux sociaux : Viadeo Twitter Google Facebook Digg Delicious MySpace Yahoo
Réponse
 
Outils de la discussion
Publicité
'
Vieux 19/02/2013, 18h28   #1
mvp86
Invité de passage
 
Homme Thierry
Inscription : février 2013
Messages : 5
Détails du profil
Informations personnelles :
Nom : Homme Thierry
Localisation : France

Informations forums :
Inscription : février 2013
Messages : 5
Points : 0
Points : 0
Par défaut Recherche de fichiers et lien actif ?

Bonjour,

Je débute en python et je suis quelque peu perdu

Comment puis-je récuperer le nom du dernier fichier fichier écrit dans un répertoire ?
Un peu comme le findfirst, findnext et findlast d'autres langages...

Et comment tester si un chemin existe, non pas en local sur le DD, mais sur le web ? par exemple pour savoir si http://www.monsite.com/toto.jpg ou http://192.168.1.255/image.jpg existe bien ? ou est bien en ligne (pas de rupture de liaison) ?

Merci.
mvp86 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 19/02/2013, 19h32   #2
wiztricks
Expert Confirmé Sénior
 
Inscription : juin 2008
Messages : 3 696
Détails du profil
Informations forums :
Inscription : juin 2008
Messages : 3 696
Points : 4 525
Points : 4 525
Salut,

Citation:
Comment puis-je récuperer le nom du dernier fichier fichier écrit dans un répertoire ? Un peu comme le findfirst, findnext et findlast d'autres langages...
En fait, je ne pense pas que de telles choses existent!
Mais je laisserais d'autres confirmer cela plutôt que de vous montrer comment çà peut se programmer "simplement": vous risqueriez d'être encore plus perdu...

Citation:
Et comment tester si un chemin existe, non pas en local sur le DD, mais sur le web ? par exemple pour savoir si http://www.monsite.com/toto.jpg ou http://192.168.1.255/image.jpg existe bien ? ou est bien en ligne (pas de rupture de liaison) ?
Là il faut faire une digression http avant de s'intéresser à Python.
On peut ouvrir l'adresse http://www.monsite.com/toto.jpg à partir de son navigateur. Mais derrière, c'est l'ouverture d'une connection TCP/IP vers le host: www.monsite.com suite d'une requête HTTP avec par exemple la méthode GET sur l'URL "/toto.jpg". S'il n'existe pas, la réponse contiendra le status 404 not found, sinon la répondre aura un "contenu" mime encodé dans le corps de la réponse que le navigateur affichera une fois récupéré...
Que l'URL soit un fichier (ou pas) dépendra de ce que voudra bien retourner le serveur HTTP.

Vous avez ensuite des applications à la sharepoint construites sur un protocole WebDAV (qui vient au dessus d'http) qui permettront d'accéder à des répertoires distants (via HTTP) et d'effectuer des opérations sur ses fichiers comme s'il s'agissait d'un répertoire local. Dans ce cas, on utilise un client/server WebDAV. Et si vous voulez le programmer avec Python, il faut commencer par lire la documentation du produit.

Hmm
- W
__________________
Architectures Post-Modernes
wiztricks est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 20/02/2013, 03h29   #3
alexdevl
Membre confirmé
 
Avatar de alexdevl
 
Inscription : avril 2007
Messages : 239
Détails du profil
Informations personnelles :
Âge : 43
Localisation : France, Loire (Rhône Alpes)

Informations forums :
Inscription : avril 2007
Messages : 239
Points : 275
Points : 275
Par défaut dernier fichier modifié

Bonjour,
Pour avoir le nom du dernier fichier modifié je ferais comme ceci:

Code :
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
 
import glob
import time
import os
 
def path_to_list(path_to_test):
    """ provide a sorted list of (last_modified_date,file_path) """
    files=[]
    for path in glob.glob(path_to_test+os.sep+"*.*"):
        if os.path.isfile(path) : # to keep only files
            t=time.localtime(os.path.getmtime(path)) # Get last modified time
            date=str(t[0])+"-"+ ("0"+str(t[1]))[-2:] +"-"+ ("0"+str(t[2]))[-2:]        
            files.append([date,path])
    files.sort()
    return files
 
path=os.getcwd()
files=path_to_list(path)
print files[0]  # first file
print files[-1] # last file
J'utilise l'aide içi:
http://docs.python.org/2/library/os.path.html

Alex
alexdevl est déconnecté   Envoyer un message privé Réponse avec citation 10
Vieux 20/02/2013, 09h04   #4
Delbor
Candidat au titre de Membre du Club
 
Homme
Inscription : février 2013
Messages : 8
Détails du profil
Informations personnelles :
Sexe : Homme
Localisation : Belgique

Informations forums :
Inscription : février 2013
Messages : 8
Points : 12
Points : 12
Pour savoir si une ressource web est accessible, il faut essayer de la récupérer, ici à l'aide de urllib si tu utilises python 2.x (urllib2 pour python 3.x, ne fonctionne pas de la même manière).

Code :
1
2
3
import urllib
connnection = urllib.urlopen("http://www.google.com")
code = connection.getcode()
"connection.getcode()" retourne le code http.

J'utilise personnellement la librairie Requests qui nettement plus intuitive à utiliser, mais qu'il faut installer
Delbor est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 20/02/2013, 20h12   #5
wiztricks
Expert Confirmé Sénior
 
Inscription : juin 2008
Messages : 3 696
Détails du profil
Informations forums :
Inscription : juin 2008
Messages : 3 696
Points : 4 525
Points : 4 525
Salut,
Je suis allé pomper ce code dans les tutos DELPHI
Code :
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
// Procédure pour compter les fichiers
Function CompteFichiers(Chemin:String):Integer;
Var S:TSearchRec;
Begin
  Chemin:=IncludeTrailingPathDelimiter(Chemin);
  Form1.Label2.Caption:=Chemin;
  Form1.Label2.Refresh;
 
  Result:=0;
  // Recherche de la première entrée du répertoire
  If FindFirst(Chemin+'*.*',faAnyFile,S)=0
  Then Begin
    Repeat
      // Il faut absolument dans le cas d'une procédure récursive ignorer
      // les . et .. qui sont toujours placés en début de répertoire
      // Sinon la procédure va boucler sur elle-même.
      If (S.Name<>'.')And(s.Name<>'..')
      Then Begin
        If (S.Attr And faDirectory)<>0
          // Dans le cas d'un sous-repertoire on appelle la même procédure
          Then Result:=Result+CompteFichiers(Chemin+S.FindData.cFileName)
          // Sinon on compte simplement le fichier
          Else Inc(Result);
      End;
    // Recherche du suivant
    Until FindNext(S)<>0;
    FindClose(S);
  End;
End;
Traduit mot à mot en Python, çà donne:
Code :
1
2
3
4
5
6
7
8
9
10
11
12
import os
 
def count_files(path):
    count = 0
    for f in os.listdir(path):
        if os.path.isdir(f):
            count += count_files(os.path.join(path, f))
        else:
            count += 1
    return count
# retourne le nombre de fichiers dans répertoire et s/répertoire courant.
print (count_files(os.getcwd()))
DELPHI plus proche de Pascal, Python plutôt C, rien que le changement de syntaxe dégage un tas d'instructions/lignes.
os.listdir retourne une "list" des noms de fichiers dans "path" rangés par ordre alphabétique. "list" étant un "itérable" pas besoin de le construire "explicitement" ce que font FindFirst, FindNext,...

- W
__________________
Architectures Post-Modernes
wiztricks est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 20/02/2013, 22h09   #6
Delbor
Candidat au titre de Membre du Club
 
Homme
Inscription : février 2013
Messages : 8
Détails du profil
Informations personnelles :
Sexe : Homme
Localisation : Belgique

Informations forums :
Inscription : février 2013
Messages : 8
Points : 12
Points : 12
Toujours sympa les fonctions récursives
Delbor est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 24/02/2013, 11h11   #7
mvp86
Invité de passage
 
Homme Thierry
Inscription : février 2013
Messages : 5
Détails du profil
Informations personnelles :
Nom : Homme Thierry
Localisation : France

Informations forums :
Inscription : février 2013
Messages : 5
Points : 0
Points : 0
Bonjour,

Merci pour les différentes réponses, je me suis fait un petit milshake de l'ensemble
Cela m'a permi d'avancer un peu.
Mais finalement je vois que je ne coupe pas à utiliser la fonction TRY que je ne maitrise pas encore, mais ça va venir !

Par contre j'ai un autre souci, il semble que les chemins ne peuvent excéder un certain nombre de caractères 70 environs et la ça ne cadre plus avec les chemins "windaube" ou internet qui vont jusqu'à 255...
Apparement ce serait la variable "string" qui n'en passe pas plus ?

Merci encore de votre aide.
mvp86 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 24/02/2013, 12h52   #8
wiztricks
Expert Confirmé Sénior
 
Inscription : juin 2008
Messages : 3 696
Détails du profil
Informations forums :
Inscription : juin 2008
Messages : 3 696
Points : 4 525
Points : 4 525
Citation:
Envoyé par mvp86 Voir le message
Par contre j'ai un autre souci, il semble que les chemins ne peuvent excéder un certain nombre de caractères 70 environs et la ça ne cadre plus avec les chemins "windaube" ou internet qui vont jusqu'à 255...
Apparement ce serait la variable "string" qui n'en passe pas plus ?
Ce genre de limite n'existe pas: montrez du code pour illustrer le problème rencontré.
- W
__________________
Architectures Post-Modernes
wiztricks est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 24/02/2013, 13h50   #9
Delbor
Candidat au titre de Membre du Club
 
Homme
Inscription : février 2013
Messages : 8
Détails du profil
Informations personnelles :
Sexe : Homme
Localisation : Belgique

Informations forums :
Inscription : février 2013
Messages : 8
Points : 12
Points : 12
Pour te convaincre qu'il n'y a pas de limite du genre de celle dont tu parles a la longueur d'un string, essaie dans une console:

Code :
1
2
3
4
5
6
7
8
txt = "a" * 256
type(txt)
>>>str
txt
>>> 'aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa'
Delbor est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 24/02/2013, 16h42   #10
mvp86
Invité de passage
 
Homme Thierry
Inscription : février 2013
Messages : 5
Détails du profil
Informations personnelles :
Nom : Homme Thierry
Localisation : France

Informations forums :
Inscription : février 2013
Messages : 5
Points : 0
Points : 0
Bon, je me suis fait avoir avec les / et \ visiblement !

>>> Chem_img='C:\Documents and Settings\HP_Propriétaire\Mes documents\DCS-2121\Rasp\130221'
>>> print Chem_img
C:\Documents and Settings\HP_Propriétaire\Mes documents\DCS-2121\RaspX221

et

>>> Chem_img='C:/Documents and Settings/HP_Propriétaire/Mes documents/DCS-2121/Rasp/130221'
>>> print Chem_img
C:/Documents and Settings/HP_Propriétaire/Mes documents/DCS-2121/Rasp/130221

Donc un simple copier/collé depuis windaube et ça ne marche pas !
Je ne sais pas s'il est possible d'inhiber cette fonction d'autoconvertir les \xx dans une chaine sous Python ?

A+
mvp86 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 24/02/2013, 18h54   #11
wiztricks
Expert Confirmé Sénior
 
Inscription : juin 2008
Messages : 3 696
Détails du profil
Informations forums :
Inscription : juin 2008
Messages : 3 696
Points : 4 525
Points : 4 525
Salut,
Python hérite du langage C l'interprétation du \ comme "quote" dans les littéraux de type string.
Dans la chaîne de caractères:
Code :
'\Documents and Settings\HP_Propriétaire\Mes documents\DCS-2121\Rasp\130221'
Les caractères interprétés apparaissent d'une couleur différentes et ne seront pas transmis tels quels.
Pour éviter çà, le r annihile:
Code :
s = r'\Documents and Settings\HP_Propriétaire\Mes documents\DCS-2121\Rasp\130221'
Sinon il faut doubler le \.
Code :
s = '\\Documents and Settings\\HP_Propriétaire\\Mes documents\\DCS-2121\\Rasp\\130221'
- W
__________________
Architectures Post-Modernes
wiztricks est déconnecté   Envoyer un message privé Réponse avec citation 00
Réponse
Outils de la discussion

Navigation rapide


Fuseau horaire GMT +2. Il est actuellement 08h04.


 
 
 
 
Partenaires

Hébergement Web