दिलचस्प पोस्ट
टी-एसक्यूएल में असमानता का परीक्षण रूट अनुप्रयोग को कैसे परिवर्तित करें? मोनोडायड: कस्टम दृश्य के कन्स्ट्रक्टर को बुलाते समय त्रुटि – दोदासक्रोल दृश्य एंड्रॉइड में लूपर, हैंडलर और संदेशक्यूई के बीच संबंध क्या है? MKMapView अधिकतम ज़ूम स्तर को सीमित करने का कोई तरीका है? Jquery.validate.js का उपयोग कर एक ईमेल पते का प्रारूप मान्य करें os.path.dirname (__ फ़ाइल_) खाली देता है एक पिक्सेल के एक्स, वाई एक छवि से रंग समन्वय कैसे प्राप्त करें? ऑब्जेक्ट में JSON स्ट्रिंग को पार्स करने के लिए सरल सी # फ़ंक्शन क्या है? IIS7 अनुमतियाँ अवलोकन – ApplicationPoolIdentity जावा नियमित अभिव्यक्ति और डॉलर का चिह्न SQL सर्वर के लिए एक कनेक्शन स्थापित करते समय एक नेटवर्क से संबंधित या इंस्टेंस-विशिष्ट त्रुटि उत्पन्न हुई पायथन में एक अपरिवर्तनीय ऑब्जेक्ट कैसे बना सकता है? क्या एंड्रॉइड एसडीके जेडीके 1.7 के साथ काम कर सकता है? एंड्रॉइड: टुकड़े बैकस्टैक्स

पायथन का इस्तेमाल करना स्पर्श करना है?

touch एक यूनिक्स उपयोगिता है जो दिन के वर्तमान समय में फ़ाइलों के संपादन और एक्सेस समय सेट करता है। यदि फ़ाइल मौजूद नहीं है, तो उसे डिफ़ॉल्ट अनुमति के साथ बनाया गया है

आप इसे पायथन फ़ंक्शन के रूप में कैसे लागू करेंगे? पार मंच और पूर्ण होने की कोशिश करें

("अजगर स्पर्श फ़ाइल" के लिए वर्तमान Google के परिणाम बहुत अच्छे नहीं हैं, लेकिन ओएसट्यूमेन्ट को इंगित करते हैं ।)

वेब के समाधान से एकत्रित समाधान "पायथन का इस्तेमाल करना स्पर्श करना है?"

यह अन्य समाधानों की तुलना में थोड़ा अधिक नस्ल मुक्त होने की कोशिश करता है। (कीवर्ड के with पायथन 2.5 में नया है।)

 import os def touch(fname, times=None): with open(fname, 'a'): os.utime(fname, times) 

मोटे तौर पर इस के बराबर।

 import os def touch(fname, times=None): fhandle = open(fname, 'a') try: os.utime(fname, times) finally: fhandle.close() 

अब, वास्तव में इसे रेस-फ्री बनाने के लिए, आपको futimes का उपयोग futimes और फ़ाइल खोलने और फाइलनाम पर टाइमस्टैम्प को बदलना (जो कि इसका नाम बदल दिया गया हो) के बजाय खुली फाइलहेन्डल का टाइमस्टैम्प बदलना होगा। दुर्भाग्य से, पायथन को futimes या इसी तरह की जा रही बिना futimes को कॉल करने का एक तरीका उपलब्ध नहीं लगता …


संपादित करें

नैट पार्सन्स द्वारा नोट किए गए अनुसार, पायथन 3.3 एक फाइल डिस्क्रिप्टर (जब os.supports_fd ) को os.utime जैसे कार्यों के लिए निर्दिष्ट करता है, जो हुड के तहत utimes बजाए futimes उपयोग करेगा। दूसरे शब्दों में:

 import os def touch(fname, mode=0o666, dir_fd=None, **kwargs): flags = os.O_CREAT | os.O_APPEND with os.fdopen(os.open(fname, flags=flags, mode=mode, dir_fd=dir_fd)) as f: os.utime(f.fileno() if os.utime in os.supports_fd else fname, dir_fd=None if os.supports_fd else dir_fd, **kwargs) 

ऐसा लगता है कि यह अजगर 3.4 के रूप में नया है – pathlib

 from pathlib import Path Path('path/to/file.txt').touch() 

यह पथ पर file.txt बना देगा।

Path.touch (मोड = 0o777, मौजूद_ok = सत्य)

इस दिए गए पथ पर एक फ़ाइल बनाएं यदि मोड दिया जाता है, तो यह फ़ाइल मोड और पहुंच वाले झंडे निर्धारित करने के लिए प्रक्रिया 'umask मान के साथ जुड़ा हुआ है। अगर फ़ाइल पहले से मौजूद है, तो function_ok सच है (और इसके संशोधन का समय वर्तमान समय में अद्यतन किया गया है), अन्यथा FileExistsError उठाया जाता है।

 def touch(fname): if os.path.exists(fname): os.utime(fname, None) else: open(fname, 'a').close() 

क्यों नहीं यह कोशिश करो?

 import os def touch(fname): try: os.utime(fname, None) except OSError: open(fname, 'a').close() 

मेरा मानना ​​है कि यह किसी भी दौड़ की स्थिति को समाप्त करता है जो मायने रखता है। यदि फ़ाइल मौजूद नहीं है, तो एक अपवाद फेंक दिया जाएगा।

एकमात्र संभावित दौड़ की स्थिति यहाँ है यदि फ़ाइल को खुले () से पहले बनाया गया है, लेकिन ओएसयूटम () के बाद। लेकिन यह कोई फर्क नहीं पड़ता क्योंकि इस मामले में संशोधन समय अपेक्षित होगा क्योंकि यह कॉल के दौरान हुआ होगा ()।

यहाँ कुछ कोड है जो ctypes का उपयोग करता है (केवल लिनक्स पर परीक्षण किया गया है):

 from ctypes import * libc = CDLL("libc.so.6") # struct timespec { # time_t tv_sec; /* seconds */ # long tv_nsec; /* nanoseconds */ # }; # int futimens(int fd, const struct timespec times[2]); class c_timespec(Structure): _fields_ = [('tv_sec', c_long), ('tv_nsec', c_long)] class c_utimbuf(Structure): _fields_ = [('atime', c_timespec), ('mtime', c_timespec)] utimens = CFUNCTYPE(c_int, c_char_p, POINTER(c_utimbuf)) futimens = CFUNCTYPE(c_int, c_char_p, POINTER(c_utimbuf)) # from /usr/include/i386-linux-gnu/bits/stat.h UTIME_NOW = ((1l << 30) - 1l) UTIME_OMIT = ((1l << 30) - 2l) now = c_timespec(0,UTIME_NOW) omit = c_timespec(0,UTIME_OMIT) # wrappers def update_atime(fileno): assert(isinstance(fileno, int)) libc.futimens(fileno, byref(c_utimbuf(now, omit))) def update_mtime(fileno): assert(isinstance(fileno, int)) libc.futimens(fileno, byref(c_utimbuf(omit, now))) # usage example: # # f = open("/tmp/test") # update_mtime(f.fileno()) 

सरलीकृत:

 def touch(fname): open(fname, 'a').close() os.utime(fname, None) 
  • open यह सुनिश्चित करता है कि वहां एक फाइल है
  • utime सुनिश्चित करता है कि टाइमस्टैम्प अपडेट हो रहे हैं

सैद्धांतिक रूप से, यह संभव है कि किसी फ़ाइल को open बाद हटा दिया जाएगा, जिसके कारण एक अपवाद उठाना होगा। लेकिन यकीनन ये ठीक है, क्योंकि कुछ बुरा हुआ।

यह जवाब, Python-2.5 के बाद के सभी संस्करणों के साथ संगत है जब कुंजीशब्द जारी किया गया है।

1. वर्तमान समय सेट करें, फ़ाइल बनाएं अगर मौजूद नहीं है (कमांड touch समान)

 import os with open(fname, 'a'): # Create file if does not exist os.utime(fname, None) # Set access/modified times to now 

एक अधिक मजबूत संस्करण:

 import os with open(fname, 'a'): try: os.utime(fname, None) except OSError: print('File has just been deleted between open() and os.utime() calls') 

2. अगर फ़ाइल मौजूद नहीं है तो बस बनाओ (समय अपडेट नहीं)

 import os with open(fname, 'a'): # Create file if does not exist pass 

3. बस फ़ाइल अभिगमन / संशोधित समय अपडेट करें (यदि फ़ाइल मौजूद नहीं है तो फ़ाइल नहीं बनाई गई है)

 import os try: os.utime(fname, None) # Set access/modified times to now except OSError: print('File does not exist (or no permission)') 

os.path.exists() का उपयोग करना कोड को सरल नहीं करता है:

 import os if os.path.exists(fname): try: os.utime(fname, None) # Set access/modified times to now except OSError: print('File has just been deleted between exists() and utime() calls (or no permission)') 

बोनस: एक निर्देशिका में सभी फाइलों का अद्यतन समय

 import os number_of_files = 0 # Current directory which is "walked through" # | Directories in root # | | Files in root Working directory # | | | | for root, _, filenames in os.walk('.'): for fname in filenames: pathname = os.path.join(root, fname) try: os.utime(pathname, None) # Set access/modified times to now number_of_files += 1 except OSError as why: print('Cannot change time of file=%s because %s', pathname, why) print('Changed time of %s files', number_of_files) 
 with open(file_name,'a') as f: pass 

जटिल (संभवतः छोटी गाड़ी):

 def utime(fname, atime=None, mtime=None) if type(atime) is tuple: atime, mtime = atime if atime is None or mtime is None: statinfo = os.stat(fname) if atime is None: atime = statinfo.st_atime if mtime is None: mtime = statinfo.st_mtime os.utime(fname, (atime, mtime)) def touch(fname, atime=None, mtime=None): if type(atime) is tuple: atime, mtime = atime open(fname, 'a').close() utime(fname, atime, mtime) 

यह प्रवेश या संशोधन समय सेट करने की भी अनुमति देता है, जैसे जीएनयू स्पर्श।

वांछित वैरिएबल के साथ एक स्ट्रिंग बनाने के लिए यह तर्कसंगत लग सकता है, और इसे os.system पर पास कर सकते हैं:

 touch = 'touch ' + dir + '/' + fileName os.system(touch) 

यह कई तरीकों से अपर्याप्त है (उदाहरण के लिए, यह सफेद स्थान को नियंत्रित नहीं करता है), इसलिए ऐसा मत करो।

उपप्रोसेस का उपयोग करने के लिए एक अधिक मजबूत विधि है:

subprocess.call(['touch', os.path.join(dirname, fileName)])

हालांकि यह एक subshell (os.system के साथ) के उपयोग से काफी बेहतर है, यह अभी भी त्वरित और गंदे लिपियों के लिए उपयुक्त है; क्रॉस-प्लेटफॉर्म कार्यक्रमों के लिए स्वीकृत उत्तर का उपयोग करें

"खुला (file_name, 'a')। close ()" मेरे लिए Python 2.7 पर Windows पर काम नहीं किया। "os.utime (file_name, none)" ठीक काम किया

इसके अलावा, मुझे कुछ दिनांक से पुरानी तिथि के साथ एक डायरेक्टरी में सभी फ़ाइलों को बार-बार स्पर्श करने की ज़रूरत थी। मैंने इमेहेन्ट के बहुत सहायक प्रतिक्रिया के आधार पर निम्नलिखित एचटी बनाया है

 def touch(file_name): # Update the modified timestamp of a file to now. if not os.path.exists(file_name): return try: os.utime(file_name, None) except Exception: open(file_name, 'a').close() def midas_touch(root_path, older_than=dt.now(), pattern='**', recursive=False): ''' midas_touch updates the modified timestamp of a file or files in a directory (folder) Arguements: root_path (str): file name or folder name of file-like object to touch older_than (datetime): only touch files with datetime older than this datetime pattern (str): filter files with this pattern (ignored if root_path is a single file) recursive (boolean): search sub-diretories (ignored if root_path is a single file) ''' # if root_path NOT exist, exit if not os.path.exists(root_path): return # if root_path DOES exist, continue. else: # if root_path is a directory, touch all files in root_path if os.path.isdir(root_path): # get a directory list (list of files in directory) dir_list=find_files(root_path, pattern='**', recursive=False) # loop through list of files for f in dir_list: # if the file modified date is older thatn older_than, touch the file if dt.fromtimestamp(os.path.getmtime(f)) < older_than: touch(f) print "Touched ", f # if root_path is a file, touch the file else: # if the file modified date is older thatn older_than, touch the file if dt.fromtimestamp(os.path.getmtime(f)) < older_than: touch(root_path)