Non posso dire se esiste un file in una condivisione di samba
-
26-09-2019 - |
Domanda
So che il nome del file è file001.txt
o FILE001.TXT
, ma io non so quale. Il file si trova su una macchina Windows che sto accedendo tramite samba punto di montaggio.
Le funzioni in os.path
sembrano agire come se fossero case-insensitive, ma la funzione open
sembra essere maiuscole e minuscole:
>>> 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
Quindi, le mie domande sono queste:
-
C'è un modo per determinare ciò che il nome del file è senza aprire il file (o annuncio la directory che si trova in)?
-
Perché è case-sensitive
open
quandoos.path
non lo è?
Aggiornamento: grazie per le risposte, ma questo non è un problema pitone così sto chiudendo la questione.
Soluzione
Si potrebbe provare ad aggiungere nocase al montaggio in fstab, come nell'esempio ho scavato al di sotto, se non è già presente:
//server/acme/app /home/joe/.wine/drive_c/App cifs guest,rw,iocharset=utf8,nocase,file_mode=0777,dir_mode=0777 0 0
trovato un link che spiega normcase
normcase è una funzione utile po ' che compensa case-insensitive i sistemi operativi che pensano che mahadeva.mp3 e mahadeva.MP3 sono il stesso file. Per esempio, su Windows e Mac OS, normcase convertirà il intero filename in minuscolo; sopra sistemi UNIX-compatibili, lo farà restituire il nome del file invariata.
che ti dice che è probabilmente aperta sempre in attesa di un nome di file caso inferiore su file system di Windows.
In quanto tale, la ragione os.path non è case sensitive è che probabilmente si chiede os.path.normcase prima di controllare per il file, mentre aperto no. Però, che potrebbe anche essere solo un bug.
Altri suggerimenti
Per rispondere alle vostre domande:
- È possibile utilizzare
stat
per determinare wether un file esiste o meno senza tentare di aprire esso. - filesystem Azioni di Windows non sono casi di sensitivi.
def exists(path):
try:
open(path).close()
except IOError:
return False
return True
problemi di autorizzazione da parte, perché non si vuole aprire il file?