2012-06-15 9 views
21

मैं एक अजगर स्क्रिप्ट के बारे में 50 अलग अस्थायी फ़ाइलें, जो सभी स्क्रिप्ट के दौरान अक्सर जोड़े जाते और अंत में विलय कर रहे हैं बनाने के लिए की जरूरत है उस पर काम कर रहा हूँ। मुझे यकीन है कि tempfile मॉड्यूल मैं क्या जरूरत है क्या कर सकते हैं, लेकिन मैं कैसे प्रलेखन पढ़ने से यह पता लगाने के लिए सक्षम नहीं किया गया है। स्क्रिप्ट अन्य फ़ाइलों की हजारों प्रक्रियाओं के रूप में इन आंकड़ों हिस्सा बड़े बड़े होते हैं, सिस्टम स्मृति के संरक्षण के लिए - के रूप में चर के लिए विरोध -कैसे पायथन के tempfile.NamedTemporaryFile (उपयोग करने के लिए)?

मैं अस्थायी फ़ाइलों का उपयोग करना चाहते।

कोड की निम्न हिस्सा हैक मैं वर्तमान में एक untemporary निर्देशिका में इन फ़ाइलों (untemporarily) बनाने के लिए उपयोग कर रहा हूँ है:

item = (string from another file) # string must id file for future use 
tmpfile = 'tmpfiles/' + item 
if item not in totalitems: 
    totalitems.add(item) 
    with open(tmpfile, 'w') as itemfile: 
     output = some stuff 
     tmpfile.write(output) 
else: 
    with open(tmpfile, 'a') as itemfile: 
     output = different stuff 
     tmpfile.write(output) 

मुझे लगता है कि मैं क्या जरूरत है tempfile.NamedTemporaryFile() है। documentation के अनुसार:

वह नाम फ़ाइल ऑब्जेक्ट के नाम सदस्य से पुनर्प्राप्त किया जा सकता है।

दुर्भाग्यवश, मुझे समझ में नहीं आता कि इसका क्या अर्थ है। जब मैं प्रसंस्करण कर रहा हूं उन फ़ाइलों में फिर से मैं अपने संबंधित "आइटम" में फिर से चलाता हूं, तो मुझे बस प्रत्येक फ़ाइल को फिर से कॉल करने में सक्षम होना चाहिए। मुझे लगता है कि यह सीधे आगे है और मैं सिर्फ घना हो रहा हूँ। यदि यह मायने रखता है, तो मेरे पास पाइथन 2.7.1 और 3.2.3 दोनों के लिए इस स्क्रिप्ट के संस्करण हैं। मुझे केवल एक या दूसरे को काम करने की ज़रूरत है; मैंने दोनों सीखने के अभ्यास के रूप में बनाया है।

+0

संभव डुप्लिकेट http://stackoverflow.com/questions/10501247/best-way- टू-उत्पन्न यादृच्छिक-फ़ाइल-नामों में अजगर) – Joe

+1

@Joe, इस सवाल का एक हिस्सा धागा आप लिंक का डुप्लिकेट होना दिखाई देता है। इसका हिस्सा नहीं है; लेवॉन के उत्तर के नीचे टिप्पणी देखें। – Gregory

+0

आपको इन फ़ाइलों को नामित करने की आवश्यकता क्यों है? अगर वे अनामित (पूर्व-हटाए गए) हैं, तो क्लीनअप के मामले में गलत होने के लिए कम है। आप बस tmpfile ऑब्जेक्ट को स्टोर कर सकते हैं, इसका नाम नहीं, और उसके बाद पढ़ने के लिए तैयार होने के लिए 'तलाश (0)' पर कॉल करें ... या इसकी सामग्री को mmap, या अन्यथा इसे पसंद करते हैं। –

उत्तर

34

"वह नाम फ़ाइल ऑब्जेक्ट के नाम सदस्य से पुनर्प्राप्त किया जा सकता है।"

मतलब यह है कि तुम इतनी तरह बनाई गई अस्थायी फ़ाइल का नाम प्राप्त कर सकते हैं:

In [4]: import tempfile 

In [5]: tf = tempfile.NamedTemporaryFile() 
In [6]: tf.name # retrieve the name of the temp file just created 
Out[6]: 'c:\\blabla\\locals~1\\temp\\tmptecp3i' 

नोट: जब यह बंद कर दिया है डिफ़ॉल्ट रूप से फ़ाइल हटा दिया जाएगा। हालांकि, अगर delete पैरामीटर गलत है, तो फ़ाइल स्वचालित रूप से हटा नहीं जाती है। अधिक जानकारी के लिए इस पर Python docs देखें।

चूंकि आप अपनी इच्छित 50 अस्थायी फ़ाइलों में से प्रत्येक का नाम पुनर्प्राप्त कर सकते हैं, इसलिए आप उन्हें बाद में उपयोग करने से पहले (जैसे आप कहते हैं), उन्हें एक सूची में सहेज सकते हैं। बस इतना है कि फ़ाइलें गायब नहीं है जब आप उन्हें बंद (मामले को बंद करने की योजना में है, और फिर बाद में उन्हें फिर से खोलना) delete मूल्य के हिसाब से सेट कर लें।

मैं विस्तार से बताया और अधिक विस्तार यहाँ में अस्थायी फ़ाइल नाम बनाने का तरीका Best way to generate random file names in Python

[सबसे अच्छा तरीका है पायथन में यादृच्छिक फ़ाइल नाम उत्पन्न करने के लिए] (की
+0

आपके मूल उत्तर के साथ धागे के लिंक के लिए धन्यवाद। मैं अभी भी अनिश्चित हूं कि फाइल को कुछ चर "आइटम" के मान में कैसे कुंजी करें। मैंने इसके लिए एक शब्दकोश का उपयोग करने के विचार पर मारा है; क्या यह उपरोक्त आपके कोड में 5 पंक्ति के बाद उपयुक्त लगता है? 'Item_tmpfile = {आइटम: tf.name}'। फिर मैं बाद में 'item_tmpfile [item] 'कह सकता हूं। – Gregory

+0

@pyrogerg हां, मुझे लगता है कि काम करना चाहिए, आप प्रत्येक अस्थायी फ़ाइल के नाम को एक अलग 'आइटम' के साथ जोड़ रहे होंगे जहां' item' बाद में temp फ़ाइल नाम पुनर्प्राप्त करने की कुंजी होगी। मुझे लगता है कि आपका शब्दकोश अंततः 50 प्रविष्टियां होगा, है ना? क्या आप फ़ाइलों के उपयोग के बीच बंद करने की योजना बना रहे हैं? यदि ऐसा है तो 'हटाएं' पैरामीटर को ध्यान में रखें। – Levon

+0

'हटाएं' टिप के लिए धन्यवाद; मैंने इसे आपके मूल उत्तर में पकड़ा। मुझे लगता है कि मैं अभी सही रास्ते पर हूं। मुझे लगता है कि मैं स्क्रिप्ट के दौरान इन फ़ाइलों का उपयोग किसी अन्य की तरह कर सकता हूं, उदा। 'खुले (item_tmpfiles [आइटम]) के साथ tf: '? – Gregory

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

  • कोई संबंधित समस्या नहीं^_^