2012-09-29 6 views
166

का उपयोग कर खाली फ़ाइल बनाएं मैं पाइथन का उपयोग कर पथ x के साथ एक फ़ाइल बनाना चाहता हूं। मैं os.system(y) का उपयोग कर रहा हूं जहां y = 'touch %s' % (x)। मैंने os.mkdir के गैर-निर्देशिका संस्करण की तलाश की है, लेकिन मुझे कुछ भी नहीं मिला है। क्या इसे खोलने के बिना फ़ाइल बनाने या सिस्टम या पॉपन/सबप्रोसेस का उपयोग करने के लिए कोई ऐसा उपकरण है?पायथन

+2

खराब क्यों खुल रहा है? –

+0

@LevLevitsky क्योंकि मुझे इसे फिर से बंद करना होगा: पी। मुझे हजारों फाइलें बनाना है, और सिर्फ फाइल को छूना क्लीनर लगता है। – tkbx

+1

एफवाईआई, इसके लिए बाहरी कमांड का उपयोग करते समय हमेशा खराब होता है, इसे निष्पादित करने का उचित तरीका 'subprocess.call (['touch', x])' – ThiefMaster

उत्तर

302

खोलने यह 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) 
+0

अच्छा लग रहा है ... "ट्रंकेट" अनिवार्य रूप से "स्पष्ट" है, है ना? – tkbx

+6

हां, 'w' (लिखें) ध्वज के साथ एक फ़ाइल खोलना इसे' ए '(संलग्न) के साथ खोलते समय खाली करता है। – ThiefMaster

+10

तत्काल फ़ाइल को बंद करने का पुनर्वितरण पर भरोसा नहीं किया जाना चाहिए। यह सफाई की बात नहीं है, क्योंकि refcounting सिर्फ एक कार्यान्वयन विस्तार है। सीपीथॉन को छोड़कर कोई पायथन नहीं करता है। पीपीपी के साथ अपना प्रोग्राम पांच गुना तेजी से बनाना चाहते हैं, या इसे जावा/.NET पर्यावरण में जेथन/आयरनपीथन के साथ चलाएं? बहुत बुरा है कि आपने उन फ़ाइलों को बंद नहीं किया है, अब आपका प्रोग्राम चाकू की तरह लीक हो रहा है;) यह 2 से विशेष रूप से भयानक है।5, जैसा कि 'साथ' फ़ाइल को समय पर बंद करना आसान बनाता है (और अपवादों और परिपत्र संदर्भों के सामने भी) ** और ** कोड बूट करने के लिए स्पष्ट हो जाता है। – delnan

27

बेशक, बिना खोलने वाली फाइलें बनाने का एक तरीका है। यह os.mknod("newfile.txt") पर कॉल करना जितना आसान है। एकमात्र कमी यह है कि इस कॉल को ओएसएक्स पर रूट विशेषाधिकारों की आवश्यकता है।

+0

महान बिंदु। Https://docs.python.org/3/library/os.html भी देखें – poolie