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:

  1. C'è un modo per determinare ciò che il nome del file è senza aprire il file (o annuncio la directory che si trova in)?

  2. Perché è case-sensitive open quando os.path non lo è?


Aggiornamento: grazie per le risposte, ma questo non è un problema pitone così sto chiudendo la questione.

È stato utile?

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:

  1. È possibile utilizzare stat per determinare wether un file esiste o meno senza tentare di aprire esso.
  2. 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?

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top