Esiste un modo per verificare se un file è stato creato da pickle
? Potrei solo rilevare eccezioni generate da pickle.load
ma non esiste un'eccezione specifica "non un file pickle".Come verificare se un file è stato creato da pickle?
risposta
I file di sottaceti non hanno un'intestazione quindi non esiste un modo standard per identificarli evitando di annullarne uno e verificando se vengono sollevate eccezioni.
È possibile definire il proprio protocollo avanzato che include una sorta di intestazione sottoclassando le classi Pickler()
e Unpickler()
nel modulo pickle
. Tuttavia questo non può essere fatto con il modulo molto più veloce cPickle
perché ci sono funzioni di fabbrica in esso che non possono essere sottoclasse [1].
Un approccio più flessibile sarebbe definire le proprie classi indipendenti che utilizzavano le corrispondenti istanze Pickler()
e Unpickler()
da uno di questi moduli nella sua implementazione.
Aggiornamento
L'ultimo byte di tutti i file sottaceto dovrebbe essere il pickle.STOP
codice operativo, così, mentre non c'è un colpo di testa, non v'è efficacemente un trailer molto minimale, che sarebbe una cosa relativamente semplice da dai un'occhiata.
seconda dell'uso esatto, potrebbe essere in grado di cavarsela con integrazione che, con qualcosa di più elaborato poiché tutti i dati oltre il STOP
codice operativo nella rappresentazione di un oggetto in salamoia viene ignorato [2].
-
[1]
Footnote [2] nella documentazione Python 2.
[2] Documentazione per
pickle.loads()
, che si applica anche a
pickle.load()
poiché è attualmente implementato in termini di quest'ultimo.
Non esiste un modo sicuro se non tentare di annullarlo e rilevare eccezioni.
- 1. come verificare se un file è stato selezionato usando javascript?
- 2. Come verificare se WaitHandle è stato impostato?
- 3. Verificare se è stato definito un metodo
- 4. Come verificare se un assembly è stato creato utilizzando la configurazione di debug o release?
- 5. JUnit test case per verificare se il file è stato creato
- 6. Come verificare se HealthKit è stato autorizzato
- 7. Come verificare se un file è stato aperto da un'altra applicazione in C++?
- 8. PHP - Come posso verificare se return() è stato chiamato da un file di inclusione()?
- 9. Come verificare se USER è già stato creato nel database o no in SQL?
- 10. Come verificare se un modulo python è stato importato?
- 11. Come scoprire se un file è già stato creato in una StorageFolder
- 12. Come verificare se virtualenv è stato creato con "--no-site-packages"?
- 13. Neo4j merge return qualcosa solo se è stato creato
- 14. Come è stato creato Google.com?
- 15. Come verificare se un file è un file immagine valido?
- 16. Come verificare se un evento è stato impedito
- 17. Come verificare se un oggetto è stato modificato
- 18. Come posso verificare se un CGPoint è stato inizializzato?
- 19. Come verificare se object "isEmpty()" se Object.prototype è stato modificato?
- 20. Come verificare se il file è un'immagine
- 21. Come verificare se un file è già aperto in C
- 22. Come verificare se un oggetto viene creato con l'istruzione `with`?
- 23. Come verificare se uno scanner è stato chiuso
- 24. Come posso leggere un database/file pickle Python da C?
- 25. Come verificare se un file esiste da un url
- 26. Uscire da un file make se lo stato di due variabili shell è un certo stato
- 27. C++ perché non è stato creato un file .lib?
- 28. Controlla se il file è stato creato entro le ultime X ore
- 29. Come verificare se il file è binario?
- 30. Verificare se un evento è stato attivato in Jasmine
Verificare la presenza di tracce di aceto e aneto –
Sei preoccupato che un file sia stato * creato * quando hai usato 'pickle.dump' o se esiste un file quando usi' pickle.load'? In entrambi i casi, l'errore si verifica quando si apre l'handle del file per l'output o l'input, non nella riga effettiva del 'pickle'. –
Non sono preoccupato che il file esista o meno ma sul fatto che un file esistente sia stato creato da 'pickle'. – Erik