Separatore path macchina virtuale

r
rapiroma (440 points)
1 8 14
asked Jan 9, 2019 in Es3 by rapiroma (440 points)
closed Jan 9, 2019 by andrea.sterbini

Ciao a tutti,

ho un problema con i test dell'esercizio 3. Sembrerebbe che la macchina virtuale non trovi il percorso di un file/directory.

Avendo provato i test in locale sul mio PC Windows e non avendo avuto nessun problema (se non un ordinamento per uno dei test, che spero di risolvere domani) mi viene il dubbio che il separatore delle cartelle della macchina virtuale sia diverso dal separatore utilizzato in Windows. Per intenderci in Windows il separatore e' il carattere "\". Visto che io lo utilizzo per fare un conteggio di profondità, non vorrei che fosse quello che possa dargli "fastidio". Anche se pensavo di aver sostituito tutti i caratteri "\" con os.path.sep

Per caso qualcun altro ha avuto un problema simile di file non trovato? Ecco l'errore: 

> files = os.listdir(directory.percorso()) 

E FileNotFoundError= [Errno 2] No such file or directory= 'dirs\\Informatica'

Fallisco praticamente subito tutti i test...

Vlr

246 views
closed with note: answered

3 Answers

marco.giuliani (23860 points)
1 13 62
answered Jan 9, 2019 by marco.giuliani (23,860 points)
Sì, la macchina virtuale gira su un altro sistema operativo, e come separatore utilizza /.

Forse ti può essere utile os.path.join, oppure se usi split o count, magari cambia \ con / e prova a ricaricarlo
r
rapiroma (440 points)
1 8 14
commented Jan 9, 2019 by rapiroma (440 points)
Credo che il problema sia dovuto al fatto che per eseguire i test sul mio computer converto, con un semplice replace, il separatore del parametro di input dei test con il separatore in Windows. Nella conversione però non tengo conto del S.O.

Cambio questo punto e riprovo.
Z
ZeroCrystal (4390 points)
3 14 46
answered Jan 9, 2019 by ZeroCrystal (4,390 points)
edited Jan 9, 2019 by ZeroCrystal

Non ti conviene concatenare a mano i nomi di file e cartelle. Utilizza piuttosto la funzione os.path.join(path, *paths).

Accetta un qualsiasi numero di parti di percorso (minimo due), ad esempio l'indirizzo di una directory e il nome di un file, e restituisce una singola stringa dove tutti i parametri sono concatenati utilizzando il separatore valido sul sistema operativo di esecuzione.

Xriuk (13590 points)
0 24 116
answered Jan 9, 2019 by Xriuk (13,590 points)
Usa "/" invece di "\", con Python funziona anche su Windows...
andrea.sterbini (172300 points)
510 927 1776
commented Jan 9, 2019 by andrea.sterbini (172,300 points)
meglio ancora ... os.path.join