मुझे एक फ़ाइल को अपडेट करने की आवश्यकता है। मैंने इसे पढ़ा और परिवर्तनों के साथ इसे लिख दिया। हालांकि, मैं एक अस्थायी फ़ाइल को लिखना पसंद करता हूं और इसे स्थान पर बदलना चाहता हूं।पायथन में, एक ही निर्देशिका में एक और फ़ाइल के रूप में एक tempfile बनाओ?
temp = tempfile.NamedTemporaryFile()
tempname = temp.name
temp.write(new_data)
temp.close()
os.rename(tempname, data_file_name)
समस्या यह है कि tempfile.NamedTemporaryFile()
/tmp
में अस्थायी फ़ाइल जो एक अलग फाइल सिस्टम है बनाता है। इसका मतलब है os.rename()
विफल रहता है। अगर मैं shlib.move()
का उपयोग करने के बजाय फिर मैं परमाणु अपडेट नहीं है कि "mv"
(समान फाइल सिस्टम, yadda, yadda, आदि में फ़ाइलों के लिए) प्रदान करता है मैं जानता हूँ कि tempfile.NamedTemporaryFile()
एक "dir" पैरामीटर लेता है, लेकिन data_file_name "foo.txt" हो सकता है जिस स्थिति में dir = '।'; या data_file_name "/path/to/the/data/foo.txt
" हो सकता है जिस स्थिति में dir = "/path/to/the/data
"।
मुझे वास्तव में क्या पसंद आएगा temp फ़ाइल data_file_name + "कुछ यादृच्छिक डेटा" होने के लिए है। इस तरह से असफल होने का लाभ होगा जो उपयोगी सुरागों के पीछे छोड़ देगा।
सुझाव?
यदि आप अस्थायी फ़ाइलों के लिए निर्देशिका में नहीं रखना चाहते हैं तो आप पहली जगह अस्थायी फ़ाइल का उपयोग क्यों कर रहे हैं? सामान्य फाइलों का उपयोग करने के खिलाफ क्या बोलता है? –
डेविड: मैं एक अस्थायी फ़ाइल का उपयोग करना चाहता हूं क्योंकि मैं अद्यतन परमाणु होना चाहता हूं (या जैसा कि परमाणु के रूप में os.rename() के साथ हो सकता है)। यही है, अगर फ़ाइल सिस्टम भर जाता है या कोई अन्य समस्या है, तो मैं नहीं चाहता कि फ़ाइल आधे लिखित हो। – TomOnTime
ठीक है, यह हासिल करना मुश्किल हो सकता है, क्योंकि आप कभी भी वास्तव में नहीं जानते हैं, अगर किसी भिन्न फ़ोल्डर में लिखी गई फाइलें आपकी स्थानीय निर्देशिका के समान फाइल सिस्टम पर हैं। मैं किसी प्रकार की प्रतिबद्धता में आपके आउटपुट को व्यवस्थित करने का लाभ देखता हूं। अपेक्षाकृत यह सुनिश्चित करने के लिए कि यह मामला है, मैं शायद अपनी खुद की अस्थायी निर्देशिका का प्रबंधन करूंगा - हालांकि आप इस फ़ोल्डर की सफाई के लिए भी देखभाल करेंगे। –