Existe-t-il un moyen de trouver la taille d'un objet fichier actuellement ouvert? En particulier, je travaille avec le module tarfile pour créer des fichiers tar, mais je ne veux pas que mon fichier tar dépasse une certaine taille. Autant que je sache, les objets tarfiles sont des objets semblables à des fichiers, alors j'imagine qu'une solution générique fonctionnerait.Taille d'un objet fichier ouvert
Répondre
$ ls -la chardet-1.0.1.tgz
-rwxr-xr-x 1 vinko vinko 179218 2008-10-20 17:49 chardet-1.0.1.tgz
$ python
Python 2.5.1 (r251:54863, Jul 31 2008, 22:53:39)
[GCC 4.1.2 (Ubuntu 4.1.2-0ubuntu4)] on linux2
Type "help", "copyright", "credits" or "license" for more information.
>>> f = open('chardet-1.0.1.tgz','rb')
>>> f.seek(0,2)
>>> f.tell()
179218L
Ajout l'idée de ChrisJY à l'exemple
>>> import os
>>> os.fstat(f.fileno()).st_size
179218L
>>>
Si vous avez le descripteur de fichier, vous pouvez utiliser fstat
pour connaître la taille, le cas échéant. Une solution plus générique consiste à chercher jusqu'à la fin du fichier, et à lire son emplacement là.
Eh bien, si l'objet de fichier en charge la méthode tell, vous pouvez faire:
current_size = f.tell()
Cela vous TELL il est actuellement l'écriture. Si vous écrivez de manière séquentielle, ce sera la taille du fichier. Sinon, vous pouvez utiliser les capacités du système de fichiers, par exemple os.fstat
comme suggéré par d'autres.
'current_size' est un mauvais nom de variable car il signifie * taille actuelle * du fichier. 'tell()' donne la position actuelle du flux de fichier - c'est-à-dire, où la prochaine lecture/écriture se produira. – IAbstract
Selon le document Python 3.6, '.tell() Renvoie la position du flux en cours en tant que numéro opaque. Le nombre ne représente généralement pas un nombre d'octets dans le stockage binaire sous-jacent. – Devy
Une autre solution utilise StringIO "si vous effectuez des opérations en mémoire".
with open(file_path, 'rb') as x:
body = StringIO()
body.write(x.read())
body.seek(0, 0)
Maintenant body
se comporte comme un objet de fichier avec différents attributs tels que body.read()
.
body.len
donne la taille du fichier.
- 1. comment fermer le fichier ouvert?
- 2. modifier un fichier ouvert C++
- 3. Importer fichier Excel ouvert dans Sql Server
- 4. Comment copier un fichier ouvert dans VB6?
- 5. Vérification du fichier est ouvert dans Delphi
- 6. Détermination du nom de fichier (ouvert) à partir d'un fichier *
- 7. Taille du fichier binaire
- 8. Obtenir la taille d'un objet Qt
- 9. PHP ouvert gzippé XML
- 10. Gestion d'un fichier ouvert lors de l'exécution de File.Move()
- 11. Réception de touches dans un fichier wx.ComboCtrl ouvert
- 12. VB.NET Comment puis-je publier un fichier ouvert?
- 13. Erreurs de boîte de dialogue de fichier ouvert Silverlight simples
- 14. Comment copier un fichier ouvert en utilisant VB6?
- 15. garder cmd ouvert lors de l'exécution d'un fichier
- 16. Détection si un fichier est déjà ouvert en javascript/hta
- 17. Comment affecter plusieurs valeurs à un tableau ouvert ou de taille fixe?
- 18. Limite Derby Taille du fichier journal
- 19. Document Word avec images Taille du fichier
- 20. taille de fichier de la bibliothèque partagée
- 21. La taille du fichier de jQuery
- 22. struts2 fileupload taille de fichier maximale
- 23. Comment optimiser la taille du fichier PDF?
- 24. Chemin/taille du fichier en C#
- 25. Adobe flex taille maximale du fichier téléchargé
- 26. C# générant des vignettes taille de fichier
- 27. Réduire la taille du fichier SWF
- 28. Jsp télécharger la taille du fichier
- 29. Taille de fichier extraite de SharpZipLib
- 30. Limite de taille de fichier SharePoint
http://docs.python.org/library/stat.html#stat.ST_SIZE 'os.fstat' renvoie la structure' stat', veuillez utiliser 'st_size' – shevski
Quelqu'un peut-il nous éclairer sur la magie de' f .seek (0,2) '? Pourquoi 'tell()' renvoie 0 sans lui? –
@m_poorUser 'f.seek (0, 2)' déplace la position de l'objet fichier à 0 octets à la fin du fichier, de sorte que la position de l'objet fichier se trouve à la fin du fichier. Ensuite, 'f.tell()' renvoie la position de l'objet fichier en cours, qui est la taille du fichier dans ce cas. Voir https://docs.python.org/2/tutorial/inputoutput.html#methods-of-file-objects – EarlCrapstone