PDA

View Full Version : Python - contenuto directory


gabmac2
23-01-2014, 17:19
Come si può memorizzare in una lista il contenuto di una directory Linux?
Grazie in anticipo

cdimauro
23-01-2014, 21:24
>>> import os
>>> os.listdir('D:/Emu')
['Amiga', 'MAME', 'OPENME!.TXT']

gabmac2
23-01-2014, 22:50
molto gentile,
è possibile però memorizzare in una lista?

cdimauro
23-01-2014, 23:17
listdir restituisce già una lista. :)

gabmac2
23-01-2014, 23:40
ma per memorizzare i valori in modo da riutilizzarli in seguito intendo

cdimauro
24-01-2014, 06:55
Lista = os.listdir('D:/Emu')

gabmac2
29-01-2014, 18:45
per verificare la presenza di un file in un determinato percorso in un sistema Unix cosa si può utilizzare?

cdimauro
29-01-2014, 20:50
>>> import os
>>> os.path.exists(r'D:\Emu\Amiga\WinUAE\WinUAE.exe')
False
>>> os.path.exists(r'D:\Emu\Amiga\UAE\WinUAE.exe')
True
Non c'è differenza fra Windows o Linux, a parte per i percorsi.

gabmac2
29-01-2014, 21:44
c' è il modo di sapere l' id di un' eventuale eccezione che viene sollevata?

cdimauro
29-01-2014, 22:10
Immagino che ti riferisca alla classe dell'eccezione. Intanto ti faccio vedere come ricavare l'istanza:
>>> try:
... 1 / 0
... except Exception as e:
... print('Eccezione sollevata:', e)
...
('Eccezione sollevata:', ZeroDivisionError('integer division or modulo by zero',))
E se t'interessa la classe:
>>> try:
... 1 / 0
... except Exception as e:
... print('Classe della eccezione sollevata:', e.__class__)
...
('Classe della eccezione sollevata:', <type 'exceptions.ZeroDivisionError'>)
Ma puoi anche decidere di intercettare solamente l'eccezione che t'interessa, e agire di conseguenza:
>>> try:
... 1 / 0
... except ZeroDivisionError:
... print('Hai provato a dividere per zero, vero?')
...
Hai provato a dividere per zero, vero?

gabmac2
29-01-2014, 22:21
molto gentile, però non si può avere un id dell' eccezione?

cdimauro
29-01-2014, 22:36
Per id cosa intendi?

gabmac2
29-01-2014, 22:45
non so ad esempio
eccezione nr. 228

cdimauro
29-01-2014, 22:49
>>> try:
... 1 / 0
... except Exception as e:
... print("L'id dell'eccezione e':", id(e))
...
("L'id dell'eccezione e':", 32354056)
Ma guarda che l'id non è univoco, e puoi ritrovartelo ripetuto altre volte, addirittura con oggetti diversi dall'eccezione.

Questo perché si tratta sostanzialmente del puntatore all'oggetto, convertito in valore intero.

Se non è adatto alle tue esigenze, dovresti spiegare meglio quello che ti serve.

gabmac2
29-01-2014, 23:03
davvero gentilissimo,
allora, quando si procede con una determinata operazione il contenuto di "e" se si solleva l' eccezione è molto esteso. Vorrei identificare quell' evento e dare una print contenuta

cdimauro
29-01-2014, 23:56
Potresti provare col solo nome della classe:
>>> try:
... 1 / 0
... except Exception as e:
... print("La classe e':", e.__class__.__name__)
...
("La classe e':", 'ZeroDivisionError')
Ma se è ancora troppo lungo, l'unico modo è mappare le eccezioni che gestisci con un apposito numeretto. Quindi ti crei un dizionario dove metti come chiave la classe (o il nome della classe) e come valore il numero che gli vuoi associare. Col try: except: di cui sopra intercetti l'eccezione, estrai la sua classe, recuperi dal dizionario il numero che ti serve passandogli la classe (o il suo nome) come chiave, e a questo punto hai quello che ti serve.

gabmac2
30-01-2014, 09:02
approfitto della tua gentilezza,
puoi fare un veloce esempio?

cdimauro
30-01-2014, 17:24
>>> ExceptionToID = {ZeroDivisionError: 1, AttributeError: 2}
>>> try:
... 1 / 0
... except Exception as e:
... print("ID dell'errore:", ExceptionToID[e.__class__])
("ID dell'errore:", 1)
>>> try:
... (1).x
... except Exception as e:
... print("ID dell'errore:", ExceptionToID[e.__class__])
("ID dell'errore:", 2)