2011-12-20 11 views
21

मैं इस समारोह एक फ़ाइल का रास्ता संदर्भ है:अजगर में एक tmp फ़ाइल बनाने

some_obj.file_name(FILE_PATH) 

जहां FILE_PATH एक फ़ाइल का रास्ता, यानी 'एच के एक स्ट्रिंग है: /path/FILE_NAME.ext '

मैं एक स्ट्रिंग की सामग्री के साथ मेरी अजगर स्क्रिप्ट के अंदर एक फ़ाइल FILE_NAME.ext बनाना चाहते हैं:

some_string = 'this is some content' 

कैसे इस बारे में जाने के लिए? पायथन स्क्रिप्ट को लिनक्स बॉक्स के अंदर रखा जाएगा। मुझे लगता है कि मुझे

import tempfile 
import os 
import sys 
os.getcwd() 

या उन पंक्तियों के साथ कुछ उपयोग करना है। धन्यवाद!

+0

'w' और फिर इसे बंद करते हैं, के साथ ओपन का उपयोग 'os.touch (fname)'। – khachik

+0

तब आपको अस्थायी फ़ाइल की आवश्यकता क्यों है? – plaes

+0

मेरे पास एक ऐसा फ़ंक्शन है जो ऑब्जेक्ट के FILE_PATH को कॉल करता है, इसलिए इसे – SuperString

उत्तर

24

अजगर के लिए एक tempfile module नहीं है, लेकिन एक साधारण फ़ाइल निर्माण भी काम कर देता है:

new_file.write('this is some content') 

के साथ:

new_file = open("path/to/FILE_NAME.ext", "w") 

अब आप write पद्धति का उपयोग करके इसे करने के लिए लिख सकते हैं tempfile मॉड्यूल यह इस तरह दिखेगा:

import tempfile 

new_file, filename = tempfile.mkstemp() 

print(filename) 

os.write(new_file, "this is some content") 
os.close(new_file) 

mkstemp के साथ आप फ़ाइल के बाद इसे हटाने के लिए जिम्मेदार हैं। अन्य तर्कों के साथ, आप फ़ाइल की निर्देशिका और नाम को प्रभावित कर सकते हैं।


अद्यतन

के रूप में हक Emmet Speer से कहा, वहाँ security considerations जब mkstemp का उपयोग कर, के रूप में ग्राहक कोड समापन के लिए जिम्मेदार है/बनाई गई फ़ाइल को साफ कर रहे हैं।

import os 

fd, path = tempfile.mkstemp() 
try: 
    with os.fdopen(fd, 'w') as tmp: 
     # do stuff with temp file 
     tmp.write('stuff') 
finally: 
    os.remove(path) 

os.fdopen एक अजगर फ़ाइल वस्तु में फ़ाइल वर्णनकर्ता लपेटता, जो स्वत: बंद जब with बाहर निकलता है: एक बेहतर तरीका यह संभाल करने के लिए निम्नलिखित स्निपेट (लिंक से लिया के रूप में) है। os.remove पर कॉल की आवश्यकता नहीं होने पर फ़ाइल को हटा देता है।

+0

होना चाहिए 'mkstemp' का दूसरा पैरामीटर फ़ाइल नाम है। मुझे लगता है कि कुछ लोगों के लिए महत्वपूर्ण हो सकता है। क्या आप इसका जिक्र करेंगे? –

+0

@ मार्टिन थोमा: एचएम, दस्तावेज़ (https://docs.python.org/3/library/tempfile.html#tempfile.mkstemp) अन्यथा कहें: 'mkstemp' के पैरामीटर' उपसर्ग ',' प्रत्यय', '' dir' और 'text'। निश्चित रूप से, वे सभी अंतिम फ़ाइल नाम को प्रभावित करते हैं, लेकिन वास्तव में पूर्ण फ़ाइल नाम निर्दिष्ट करना संभव नहीं है। – Constantinius

+0

@ कॉन्स्टेंटिनस: ओह, क्षमा करें, मैं पैरामीटर लिखना नहीं चाहता था लेकिन मूल्य वापस कराना चाहता था। –

62

मुझे लगता है कि आप इस के लिए देख रहे: http://docs.python.org/library/tempfile.html

import tempfile 
f = tempfile.NamedTemporaryFile(delete=False) 
f.close() 
f.name 
+2

यह प्रश्न के विषय पर आधारित एक अच्छा उत्तर है, जिसे Google सुपरस्टिंग की विशेष समस्या के बजाय नोट करता है –

+0

डकडकगो में पहला वाला है: डी – ZiTAL

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