2011-03-02 14 views
7

Estoy usando la función os.path.getsize() que da el tamaño del archivo en bytes.¿Por qué os.path.getsize() devuelve un número negativo para un archivo de 10 gb?

Como mi tamaño de archivo es 10 gb, me da tamaño en negativo (bytes).

¿alguien puede darme alguna idea de por qué sucede esto?

Este es mi código:

import os 
ospathsize = os.path.getsize('/home/user/Desktop/test1.nrg') 
print (ospathsize) 
+0

@Dipen ¿Estás usando Windows? – phimuemue

+0

Estoy usando linux. – Dipen

+0

@Dipen ¿Qué dice 'ls -l' sobre el tamaño del archivo? ¿El propio Linux lo muestra correctamente? – phimuemue

Respuesta

10

Su núcleo de Linux, obviamente, tiene soporte de archivos grandes, ya que ls -l funciona correctamente. Por lo tanto, es su instalación de Python la que le falta soporte. (¿Está utilizando el paquete Python de su distribución? ¿Qué distribución es?)

La documentación en POSIX large file support in Python indica que Python normalmente debería hacer uso de soporte de archivos grandes si está disponible en Linux. También sugiere que tratar de configurar Python con la línea de comandos

CFLAGS='-D_LARGEFILE64_SOURCE -D_FILE_OFFSET_BITS=64' OPT="-g -O2 $CFLAGS" \ 
    ./configure 

Y, por último, citando el man page of the stat system call:

Esto puede ocurrir cuando una aplicación compilada en una plataforma de 32 bits sin -D_FILE_OFFSET_BITS=64 llamadas stat() en un archivo cuyo tamaño excede (1<<31)-1 bits.

(creo que la última palabra debe ser "bytes".)

1

se parece a un desbordamiento de enteros de 32 bits utilizado para el tamaño que está limitado a 4 GB. Esto puede ser un error (o incluso una bandera de compilación faltante) en su versión particular de Python. Lo probé en una caja de Linux de 32 bits, usando Python 2.4 y 2.6; ambos dan resultados correctos en archivos de más de 4 GB.

Intente actualizar su Python; la solución es probablemente una versión menor de distancia.

Cuestiones relacionadas