2011-03-02 11 views
7

मैं फ़ंक्शन os.path.getsize() का उपयोग कर रहा हूं जो फ़ाइल का आकार बाइट्स में देता है।os.path.getsize() 10gb फ़ाइल के लिए ऋणात्मक संख्या क्यों देता है?

जैसा कि मेरा एक फ़ाइल आकार 10 जीबी है, यह मुझे नकारात्मक (बाइट्स) आकार देता है।

तो क्या कोई मुझे कोई विचार दे सकता है कि ऐसा क्यों होता है?

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

@Dipen क्या आप खिड़कियों का उपयोग कर रहे हैं? – phimuemue

+0

मैं लिनक्स का उपयोग कर रहा हूं। – Dipen

+0

@Dipen फ़ाइल आकार के बारे में 'ls -l' कह रहा है? क्या लिनक्स स्वयं इसे सही तरीके से प्रदर्शित करता है? – phimuemue

उत्तर

10

आपका लिनक्स कर्नेल स्पष्ट रूप से बड़ी फाइल समर्थन हासिल है, ls -l के बाद से काम करता है सही ढंग से:

यह मेरा कोड है। इस प्रकार, यह आपकी पायथन स्थापना है जिसमें समर्थन की कमी है। (क्या आप अपने वितरण के पायथन पैकेज का उपयोग कर रहे हैं? यह वितरण क्या है?)

POSIX large file support in Python पर प्रलेखन में कहा गया है कि पाइथन को आमतौर पर लिनक्स पर उपलब्ध होने पर बड़े फ़ाइल समर्थन का उपयोग करना चाहिए। यह भी कोशिश करते हैं और कमांड लाइन के साथ अजगर कॉन्फ़िगर

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

और अंत करने के लिए, के हवाले से पता चलता है man page of the stat system call:

यह हो सकता है जब एक आवेदन -D_FILE_OFFSET_BITS=64 कॉल stat() पर बिना एक 32-बिट मंच पर संकलित एक फ़ाइल जिसका आकार (1<<31)-1 बिट्स से अधिक है।

(मेरा मानना ​​है कि अंतिम शब्द होना चाहिए "बाइट"।)

1

आकार के लिए इस्तेमाल किया 32-बिट पूर्णांक के एक अतिप्रवाह जो 4GB तक ही सीमित है ऐसा लगता है। यह पाइथन के आपके विशेष संस्करण में एक बग (या यहां तक ​​कि एक लापता संकलन ध्वज) हो सकता है। मैंने अभी 32-बिट लिनक्स बॉक्स में कोशिश की है, पायथन 2.4 और 2.6 का उपयोग कर; दोनों 4 जीबी से बड़ी फ़ाइलों पर सही परिणाम देते हैं।

अपने पायथन को अपग्रेड करने का प्रयास करें; फिक्स शायद एक मामूली संस्करण दूर है।

संबंधित मुद्दे