एक ऐसी फाइल है जिसे मैं सुनिश्चित करना चाहता हूं कि 2 जीबी से बड़ा न हो (क्योंकि यह एक सिस्टम पर चलाना चाहिए जो ext 2 का उपयोग करता है)। फ़ाइल के आकार को जांचने का एक अच्छा तरीका क्या है कि मैं इस फ़ाइल में चेक के बीच लिख रहा हूं? विशेष रूप से, क्या मुझे buffered, unflushed परिवर्तनों के बारे में चिंता करने की ज़रूरत है जिन्हें अभी तक डिस्क पर नहीं लिखा गया है?मैं पायथन में एक खुली फ़ाइल का आकार कैसे निर्धारित करूं?
उत्तर
आप कुछ इस तरह से शुरू कर सकता है:
class TrackedFile(file):
def __init__(self, filename, mode):
self.size = 0
super(TrackedFile, self).__init__(filename, mode)
def write(self, s):
self.size += len(s)
super(TrackedFile, self).write(s)
तो फिर तुम इसे इस तरह इस्तेमाल कर सकते हैं:
>>> f = TrackedFile('palindrome.txt', 'w')
>>> f.size
0
>>> f.write('A man a plan a canal ')
>>> f.size
21
>>> f.write('Panama')
27
जाहिर है, इस कार्यान्वयन काम नहीं करता है, तो आप फ़ाइल नहीं लिख रहे हैं स्क्रैच से, लेकिन आप प्रारंभिक डेटा को संभालने के लिए अपने __init__
विधि को अनुकूलित कर सकते हैं। उदाहरण के लिए, आपको कुछ अन्य विधियों को ओवरराइड करने की भी आवश्यकता हो सकती है: writelines
।
यह एन्कोडिंग की परवाह किए बिना काम करता है, क्योंकि तार केवल बाइट्स के अनुक्रम हैं।
>>> f2 = TrackedFile('palindrome-latin1.txt', 'w')
>>> f2.write(u'A man a plan a canál '.encode('latin1')
>>> f3 = TrackedFile('palindrome-utf8.txt', 'w')
>>> f3.write(u'A man a plan a canál '.encode('utf-8'))
>>> f2.size
21
>>> f3.size
22
+1: यह वास्तव में चालाक विचार है। मुझें यह पसंद है! – jathanism
यह वास्तव में नहीं है। यह आप ASCII, ISO1559 और UTF-8 का उपयोग करते हैं, परिणाम वही होगा, लेकिन डिस्क आकार पर नहीं होगा। –
नहीं। यदि आप वास्तविक तारों का उपयोग करते हैं, तो यह अन्य एन्कोडिंग के लिए भी काम करता है। प्रदर्शित करने के लिए संशोधित उत्तर। – jcdyer
शायद आप जो चाहते हैं उसे नहीं, लेकिन मैं इसे वैसे भी सुझाव दूंगा।
import os
a = os.path.getsize("C:/TestFolder/Input/1.avi")
वैकल्पिक रूप से एक खोला फ़ाइल के लिए आप fstat समारोह है, जो एक खोला फ़ाइल पर इस्तेमाल किया जा सकता का उपयोग कर सकते हैं। यह एक पूर्णांक फ़ाइल हैंडल, नहीं एक फ़ाइल वस्तु लगता है, इसलिए फ़ाइल वस्तु पर fileno विधि का उपयोग करने के लिए है:
a = open("C:/TestFolder/Input/1.avi")
b = os.fstat(a.fileno()).st_size
सबसे विश्वसनीय एक रैपिंग वर्ग जो फ़ाइल के आकार की जाँच करेगा जब आप इसे खोलने बनाने होगा, ट्रैक लिखें और संचालन की तलाश करें, उन परिचालनों के आधार पर वर्तमान आकार की गणना करें और आकार सीमा से अधिक रोकें।
या, फ़ाइल पहले से ही खुला है यदि:
>>> fsock = open('/etc/hosts', 'rb').read()
>>> len(fsock)
444
कितने बाइट्स फ़ाइल है कि।
os.fstat(file_obj.fileno()).st_size
चाल चलाना चाहिए। मुझे लगता है कि यह लिखित बाइट वापस करेगा। यदि आप बफरिंग के बारे में चिंतित हैं तो आप हमेशा हाथ से फ्लश कर सकते हैं।
और संलग्न मोड में भी काम करता है! धन्यवाद। और हाँ, मैं इसे बुलाए जाने से पहले फ्लश करूंगा। –
मैं अजगर से परिचित नहीं हूं, लेकिन स्ट्रीम ऑब्जेक्ट नहीं है (या फ़ाइल खोलते समय आपको जो भी मिलता है) में ऐसी संपत्ति होती है जिसमें स्ट्रीम की वर्तमान स्थिति होती है?
ftell() सी फ़ंक्शन, या Stream.Position .NET में आपको जो मिलता है उसके समान।
जाहिर है, यह केवल तभी काम करता है जब आप स्ट्रीम के अंत में स्थित हैं, जो आप हैं यदि आप वर्तमान में इसे लिख रहे हैं।
इस दृष्टिकोण का लाभ यह है कि आपको फ़ाइल को बंद करने या unflushed डेटा के बारे में चिंता करने की आवश्यकता नहीं है।
'filehandle.tell()' वास्तव में खुली फ़ाइल में बाइट्स की संख्या दिखाता है, और या तो लिखने या संलग्न मोड में काम करता है। निश्चित नहीं है कि इन सभी जटिल उत्तरों को क्यों उखाड़ फेंक दिया गया। – hurfdurf
@hurfdurf नहीं, 'f.tell() 'परिशिष्ट मोड में भरोसेमंद काम नहीं कर रहा है। जब तक आप पहले 'f.seek (0,2) '। मुझे कोई जानकारी नहीं है की क्यों। –
हालांकि यह एक पुराना सवाल है, मुझे लगता है कि इसाक का सबसे सरल समाधान है। यहाँ कैसे पायथन में यह करना है:
# Assuming f is an open file
>>> pos = f.tell() # Save the current position
>>> f.seek(0, 2) # Seek to the end of the file
>>> length = f.tell() # The current position is the length
>>> f.seek(pos) # Return to the saved position
>>> print length
1024
मुझे लगता है कि पहली पंक्ति में (वर्तमान स्थिति को सहेजें), आपको f.tell() का उपयोग करना चाहिए, नहीं(), जो अपवाद का कारण बनता है क्योंकि() को कम से कम 1 तर्क की आवश्यकता होती है। – Jkm
@ जेकेएम हाँ, आप सही हैं! यकीन नहीं है कि मैं इसे कैसे चूक गया। धन्यवाद! – Trenton
यह फ़ाइल आकार की सही गणना करेगा, लेकिन ज्ञात समस्याओं के कारण स्थिति को सही ढंग से पुनर्स्थापित नहीं करेगा [संलग्न मोड में बताएं] (https://stackoverflow.com/questions/31680677/)। –
- 1. एक खुली फ़ाइल वस्तु का आकार
- 2. मैं वीबी 6 में एक खुली फ़ाइल कैसे कॉपी करूं?
- 3. मैं Emacs में एक खुली फ़ाइल का नाम कैसे बदलूं?
- 4. मैं MySQL में अधिकतम लेनदेन आकार कैसे निर्धारित करूं?
- 5. मैं अपने हेडर (ओं) का उपयोग कर सटीक पीई छवि फ़ाइल आकार कैसे निर्धारित करूं?
- 6. विंडोज में एक निर्धारित आकार की फ़ाइल कैसे उत्पन्न करें?
- 7. आप सी में फ़ाइल का आकार कैसे निर्धारित करते हैं?
- 8. मैं स्क्रॉलहेइट कैसे निर्धारित करूं?
- 9. पायथन खुली कच्ची ऑडियो डेटा फ़ाइल
- 10. मैं पायथन में .pyx फ़ाइल से फ़ंक्शन कैसे आयात करूं?
- 11. मैं एक एमवीवीएम अनुप्रयोग में निष्क्रियता कैसे निर्धारित करूं?
- 12. मैं एंड्रॉइड में temp फ़ाइल का फ़ाइल आकार कैसे प्राप्त करूं?
- 13. पायथन में एक खुली फ़ाइल के Win32 हैंडल कैसे प्राप्त करें?
- 14. एक खुली फ़ाइल का नाम कैसे प्राप्त करें?
- 15. मैं ओपनसीएल में उपलब्ध डिवाइस मेमोरी कैसे निर्धारित करूं?
- 16. टीएसक्यूएल: मैं लेनदेन लॉग का आकार कैसे प्राप्त करूं?
- 17. मैं ग्रहण एक्सप्लोरर में एक खुली फ़ाइल कैसे दिखा सकता हूं?
- 18. पायथन में, मैं स्ट्रिंगियो ऑब्जेक्ट का आकार कैसे देखूं?
- 19. मैं उचित चेक अंतराल कैसे निर्धारित करूं?
- 20. मैं कैसे निर्धारित करूं कि एक्सेल वीबीए
- 21. मैं पायथन में पैच अनुरोध कैसे करूं?
- 22. मैं नियंत्रण की दृश्यता कैसे निर्धारित करूं?
- 23. मैं jaxb.index फ़ाइल का उपयोग कैसे करूं?
- 24. मैं पायथन में मॉड्यूल कैसे दस्तावेज़ करूं?
- 25. मैं पर्सफोर्स से निर्देशिका का आकार कैसे प्राप्त करूं?
- 26. मैं एक बाइनरी फ़ाइल कैसे विलय करूं?
- 27. मैं पायथन में सिगिनट कैप्चर कैसे करूं?
- 28. मैं कॉम्बोबॉक्स की ऊंचाई कैसे निर्धारित करूं?
- 29. सी # खुली फ़ाइल,% userprofile%
- 30. मैं पायथन में अननोड कैसे करूं?
वहाँ एक कारण है कि आप बस अपने आप फ़ाइल आकार का ट्रैक रखने नहीं कर सकता है - जो है, क्या आकार है जब आप इसे खोलने के लिए और एक काउंटर जब आप लिखते हैं बढ़ाने के देख ?विशेष रूप से सुरुचिपूर्ण नहीं है, लेकिन यह काम करना चाहिए। –
मुझे लगता है कि यह एक संभावना है जिसके बारे में मैंने सोचा नहीं था ... मैं भी कोशिश कर सकता हूं। –
क्या यह नरक के रूप में अक्षम नहीं है? –