2012-11-07 18 views
6

अगर मैं कुछ फ़ाइल जैसी वस्तु है और निम्न करें:पायथन की तलाश कैसे काम करती है?

F = open('abc', 'r') 
... 
loc = F.tell() 
F.seek(loc-10) 

क्या करना चाहते हैं करता है? फ़ाइल की शुरुआत में शुरू होता है और loc-10 बाइट्स पढ़ता है? या यह 10 बाइट्स का बैक अप लेने के लिए पर्याप्त स्मार्ट है?

उत्तर

9

यह ओएस- और libc- विशिष्ट है। file.seek() ऑपरेशन fseek(3) सी को वास्तविक ओएस-स्तरीय फ़ाइलों के लिए कॉल किया गया है।

+0

तो क्या यह मंच और कार्यान्वयन निर्भर है? – jlconlin

+0

हां, कार्यान्वयन के साथ libc और OS के बीच विभाजित है। –

+0

तो क्या फ़ाइल की शुरुआत शुरू किए बिना ऐसा करना संभव/आसान है? – jlconlin

4

यह 10 बाइट्स का बैक अप लेने के लिए पर्याप्त स्मार्ट होना चाहिए, लेकिन मुझे लगता है कि विवरण वास्तव में आपके द्वारा उपयोग की जा रही फाइल सिस्टम/ओएस/रनटाइम लाइब्रेरी पर निर्भर करते हैं।

ध्यान दें कि यदि आप केवल 10 बाइट्स का बैक अप लेना चाहते हैं, तो tell की आवश्यकता नहीं है।

F.seek(-10,1) 
+0

इसे साझा करने के लिए धन्यवाद है। यह मेरे उदाहरण के मुकाबले एक बहुत ही सरल कार्यान्वयन है। – jlconlin

8

Python 2.7's docs के अनुसार:

file.seek(offset[, whence])

फ़ाइल की वर्तमान स्थिति निर्धारित करें, stdio के fseek की तरह()। कहां तर्क वैकल्पिक है और os.SEEK_SET या 0 (पूर्ण फ़ाइल स्थिति) पर डिफ़ॉल्ट है; अन्य मान os.SEEK_CUR या 1 हैं ( वर्तमान स्थिति के सापेक्ष खोजें) और os.SEEK_END या 2 (फ़ाइल के अंत के सापेक्ष खोजें)।

तुम जाओ करने के लिए 10 बाइट्स अपनी स्थिति के सापेक्ष वापस चाहेगा कहते हैं:

file.seek(-10, 1) 
-4

दस्तावेज़ के अनुसार, आप F.seek(-10, loc)

अपने उदाहरण f.seek(offset, from_what), या अपने मामले में क्या करने की जरूरत है, काम करना चाहिए, लेकिन यह अधिक स्पष्ट

+4

यह काफी भ्रामक है। यह उत्तर केवल तभी काम करता है जब 'लोक' 1 है। – mgilson