2010-10-27 24 views
0

Je sais que le nom de fichier est file001.txt ou FILE001.TXT, mais je ne sais pas lequel. Le fichier se trouve sur une machine Windows à laquelle j'accède via le point de montage Samba.Je ne sais pas si un fichier existe sur un partage samba

Les fonctions os.path semblent agir comme si elles étaient insensibles à la casse, mais la fonction open semble être sensible à la casse:

>>> from os.path import exists, isfile 

>>> exists('FILE001.TXT') 
True 

>>> isfile('FILE001.TXT') 
True 

>>> open('FILE001.TXT') 
Traceback (most recent call last): 
    File "<console>", line 1, in <module> 
IOError: [Errno 2] No such file or directory: 'FILE001.TXT' 

>>> open('file001.txt') # no problem 

Alors, mes questions sont les suivantes:

  1. Existe-t-il un moyen de déterminer le nom du fichier sans ouvrir le fichier (ou en listant le répertoire dans lequel il se trouve)?

  2. Pourquoi est-ce que open est sensible à la casse lorsque os.path ne l'est pas?


Mise à jour: Merci pour les réponses, mais this isn't a python problem donc je ferme la question.

Répondre

1

Vous pourriez essayer d'ajouter nocase à la montagne dans votre fstab, comme dans l'exemple que je dégoté ci-dessous si elle est pas déjà:

//server/acme/app /home/joe/.wine/drive_c/App cifs guest,rw,iocharset=utf8,nocase,file_mode=0777,dir_mode=0777 0 0 

Found a link explaining normcase

normcase est utile petite fonction qui compense les systèmes d'exploitation insensibles à la casse qui pensent que mahadeva.mp3 et mahadeva.MP3 sont le même fichier . Par exemple, sur Windows et Mac OS, normcase convertira le nom de fichier complet en minuscules; sur systèmes compatibles UNIX, il retourner le nom de fichier inchangé.

Cela vous dit que ouvert est probablement toujours attend un nom de fichier minuscule sur les systèmes de fichiers Windows. En tant que tel, la raison pour laquelle os.path n'est pas sensible à la casse est qu'il appelle probablement os.path.normcase avant de rechercher le fichier, alors que open ne le fait pas. Cependant, cela pourrait aussi être un bug.

+0

J'étais plein d'espoir pour cette suggestion, mais 'nocase' ne change pas le comportement. FILE001.TXT et file001.txt retournent tous deux la valeur true dans 'os.path.exists'. – Seth

+0

@Seth Os.path.normcase (fichier) renvoie-t-il le nom de fichier avec le bon cas? Vous devrez m'excuser si c'est une question naïve que je n'ai pas touché python lui-même depuis un moment. –

0

Pour répondre à vos questions:

  1. Vous pouvez utiliser stat pour déterminer wether un fichier existe ou non sans essayer de l'ouvrir.
  2. Windows Partages Les systèmes de fichiers ne sont pas sensibles à la casse.
+0

'stat' fonctionne (tout comme getctime et tout ce que j'ai essayé sauf' open'). – Seth

0
def exists(path): 
    try: 
     open(path).close() 
    except IOError: 
     return False 
    return True 

problèmes d'autorisation de côté, pourquoi ne voulez-vous pas ouvrir le fichier?

+0

Ce n'est pas que je ne veux pas ouvrir le fichier, mais que j'ai besoin du nom de fichier correct pour l'ouverture ultérieure. – Seth