का उपयोग कर खाली फ़ाइल बनाएं मैं पाइथन का उपयोग कर पथ x
के साथ एक फ़ाइल बनाना चाहता हूं। मैं os.system(y)
का उपयोग कर रहा हूं जहां y = 'touch %s' % (x)
। मैंने os.mkdir
के गैर-निर्देशिका संस्करण की तलाश की है, लेकिन मुझे कुछ भी नहीं मिला है। क्या इसे खोलने के बिना फ़ाइल बनाने या सिस्टम या पॉपन/सबप्रोसेस का उपयोग करने के लिए कोई ऐसा उपकरण है?पायथन
पायथन
उत्तर
खोलने यह
os.mknod("newfile.txt")
नहीं है बिना एक फ़ाइल बनाने के लिए कोई तरीका नहीं है (लेकिन यह OSX रूट विशेषाधिकारों की आवश्यकता है)। फाइल बनाने के लिए सिस्टम कॉल O_CREAT
ध्वज के साथ है। कोई फर्क नहीं पड़ता कि कैसे, आप हमेशा फ़ाइल खोलेंगे।
open(x, 'a').close()
वास्तव में आप .close()
छोड़ सकते हैं, क्योंकि CPython के refcounting जीसी open()
बयान के बाद इसे तुरंत बंद हो जाएगा:
तो बस मामले में यह मौजूद है यह छोटा बिना एक फ़ाइल बनाने के लिए सबसे आसान तरीका यह है समाप्त हो गया - लेकिन यह स्पष्ट रूप से ऐसा करने के लिए क्लीनर है और सीपीथन-विशिष्ट व्यवहार पर भरोसा करना अच्छा नहीं है।
मामले में आप touch
के व्यवहार चाहते हैं (यानी mtime मामले में फ़ाइल मौजूद अद्यतन):
import os
def touch(path):
with open(path, 'a'):
os.utime(path, None)
आप इस विस्तार भी रास्ते में किसी भी निर्देशिका मौजूद नहीं है कि बनाने के लिए कर सकते हैं:
basedir = os.path.dirname(path)
if not os.path.exists(basedir):
os.makedirs(basedir)
अच्छा लग रहा है ... "ट्रंकेट" अनिवार्य रूप से "स्पष्ट" है, है ना? – tkbx
हां, 'w' (लिखें) ध्वज के साथ एक फ़ाइल खोलना इसे' ए '(संलग्न) के साथ खोलते समय खाली करता है। – ThiefMaster
तत्काल फ़ाइल को बंद करने का पुनर्वितरण पर भरोसा नहीं किया जाना चाहिए। यह सफाई की बात नहीं है, क्योंकि refcounting सिर्फ एक कार्यान्वयन विस्तार है। सीपीथॉन को छोड़कर कोई पायथन नहीं करता है। पीपीपी के साथ अपना प्रोग्राम पांच गुना तेजी से बनाना चाहते हैं, या इसे जावा/.NET पर्यावरण में जेथन/आयरनपीथन के साथ चलाएं? बहुत बुरा है कि आपने उन फ़ाइलों को बंद नहीं किया है, अब आपका प्रोग्राम चाकू की तरह लीक हो रहा है;) यह 2 से विशेष रूप से भयानक है।5, जैसा कि 'साथ' फ़ाइल को समय पर बंद करना आसान बनाता है (और अपवादों और परिपत्र संदर्भों के सामने भी) ** और ** कोड बूट करने के लिए स्पष्ट हो जाता है। – delnan
बेशक, बिना खोलने वाली फाइलें बनाने का एक तरीका है। यह os.mknod("newfile.txt")
पर कॉल करना जितना आसान है। एकमात्र कमी यह है कि इस कॉल को ओएसएक्स पर रूट विशेषाधिकारों की आवश्यकता है।
महान बिंदु। Https://docs.python.org/3/library/os.html भी देखें – poolie
खराब क्यों खुल रहा है? –
@LevLevitsky क्योंकि मुझे इसे फिर से बंद करना होगा: पी। मुझे हजारों फाइलें बनाना है, और सिर्फ फाइल को छूना क्लीनर लगता है। – tkbx
एफवाईआई, इसके लिए बाहरी कमांड का उपयोग करते समय हमेशा खराब होता है, इसे निष्पादित करने का उचित तरीका 'subprocess.call (['touch', x])' – ThiefMaster