जवाबों:
अपडेट : dirpath
पायथन 3 में संशोधन तिथि द्वारा प्रविष्टियों को क्रमबद्ध करना :
import os
from pathlib import Path
paths = sorted(Path(dirpath).iterdir(), key=os.path.getmtime)
( अधिक दृश्यता के लिए @ पायरेसी का जवाब यहां डालें )
यदि आपके पास पहले से ही फ़ाइलनामों की सूची है files
, तो इसे विंडोज पर निर्माण समय के आधार पर सॉर्ट करने के लिए:
files.sort(key=os.path.getctime)
उदाहरण के लिए, आपके द्वारा प्राप्त फ़ाइलों की सूची, glob
जैसा कि @ जे के उत्तर में दिखाया गया है ।
वर्ष जवाब
यहाँ के संस्करण वर्बोज़ एक और भी है @Greg Hewgill
की जवाब । यह प्रश्न आवश्यकताओं के लिए सबसे अनुरूप है। यह निर्माण और संशोधन तिथियों (कम से कम विंडोज पर) के बीच अंतर करता है।
#!/usr/bin/env python
from stat import S_ISREG, ST_CTIME, ST_MODE
import os, sys, time
# path to the directory (relative or absolute)
dirpath = sys.argv[1] if len(sys.argv) == 2 else r'.'
# get all entries in the directory w/ stats
entries = (os.path.join(dirpath, fn) for fn in os.listdir(dirpath))
entries = ((os.stat(path), path) for path in entries)
# leave only regular files, insert creation date
entries = ((stat[ST_CTIME], path)
for stat, path in entries if S_ISREG(stat[ST_MODE]))
#NOTE: on Windows `ST_CTIME` is a creation date
# but on Unix it could be something else
#NOTE: use `ST_MTIME` to sort by a modification date
for cdate, path in sorted(entries):
print time.ctime(cdate), os.path.basename(path)
उदाहरण:
$ python stat_creation_date.py
Thu Feb 11 13:31:07 2009 stat_creation_date.py
cdate
बाद से कुछ सेकंड की फ्लोट संख्या है।
मैंने एक निर्देशिका में अंतिम अद्यतन फ़ाइलों को निर्धारित करने के लिए पायथन स्क्रिप्ट के लिए अतीत में ऐसा किया है:
import glob
import os
search_dir = "/mydir/"
# remove anything from the list that is not a file (directories, symlinks)
# thanks to J.F. Sebastion for pointing out that the requirement was a list
# of files (presumably not including directories)
files = list(filter(os.path.isfile, glob.glob(search_dir + "*")))
files.sort(key=lambda x: os.path.getmtime(x))
फाइल माइम के आधार पर आपको वही करना चाहिए जो आप देख रहे हैं।
EDIT : ध्यान दें कि आप glob.glob () के स्थान पर os.listdir () का उपयोग कर सकते हैं - यदि वांछित हो - तो मैंने अपने मूल कोड में ग्लोब का उपयोग किया था, मैं केवल किसी विशेष सेट के साथ फ़ाइलों की खोज करने के लिए ग्लोब का उपयोग करना चाहता था। फ़ाइल एक्सटेंशन, जो ग्लोब () के लिए बेहतर अनुकूल था। यहां सूची का उपयोग करने के लिए यह कैसा दिखेगा:
import os
search_dir = "/mydir/"
os.chdir(search_dir)
files = filter(os.path.isfile, os.listdir(search_dir))
files = [os.path.join(search_dir, f) for f in files] # add path to each file
files.sort(key=lambda x: os.path.getmtime(x))
files.sort(key=lambda fn: os.path.getmtime(os.path.join(search_dir, fn)))
files.sort(key=os.path.getmtime)
(बिना lambda
) काम करना चाहिए ।
यहाँ मेरा संस्करण है:
def getfiles(dirpath):
a = [s for s in os.listdir(dirpath)
if os.path.isfile(os.path.join(dirpath, s))]
a.sort(key=lambda s: os.path.getmtime(os.path.join(dirpath, s)))
return a
सबसे पहले, हम फ़ाइल नामों की एक सूची बनाते हैं। isfile () का उपयोग निर्देशिकाओं को छोड़ने के लिए किया जाता है; यदि निर्देशिकाओं को शामिल किया जाना चाहिए तो इसे छोड़ा जा सकता है। फिर, हम सूची को इन-प्लेस में क्रमबद्ध करते हैं, कुंजी के रूप में संशोधित तिथि का उपयोग करते हुए।
a[-5:]
यहाँ एक लाइनर है:
import os
import time
from pprint import pprint
pprint([(x[0], time.ctime(x[1].st_ctime)) for x in sorted([(fn, os.stat(fn)) for fn in os.listdir(".")], key = lambda x: x[1].st_ctime)])
यह फ़ाइल नाम की सूची प्राप्त करने के लिए os.listdir () को कॉल करता है, फिर प्रत्येक को निर्माण समय प्राप्त करने के लिए os.stat () कॉल करता है, फिर निर्माण समय के विरुद्ध सॉर्ट करता है।
ध्यान दें कि यह विधि केवल प्रत्येक फ़ाइल के लिए एक बार os.stat () को कॉल करती है, जो एक तरह से प्रत्येक तुलना के लिए इसे कॉल करने से अधिक कुशल होगी।
निर्देशिका बदलने के बिना:
import os
path = '/path/to/files/'
name_list = os.listdir(path)
full_list = [os.path.join(path,i) for i in name_list]
time_sorted_list = sorted(full_list, key=os.path.getmtime)
print time_sorted_list
# if you want just the filenames sorted, simply remove the dir from each
sorted_filename_list = [ os.path.basename(i) for i in time_sorted_list]
print sorted_filename_list
# *** the shortest and best way ***
# getmtime --> sort by modified time
# getctime --> sort by created time
import glob,os
lst_files = glob.glob("*.txt")
lst_files.sort(key=os.path.getmtime)
print("\n".join(lst_files))
sorted(filter(os.path.isfile, os.listdir('.')),
key=lambda p: os.stat(p).st_mtime)
आप os.walk('.').next()[-1]
फ़िल्टर करने के बजाय उपयोग कर सकते हैं os.path.isfile
, लेकिन यह सूची में मृत सिमलिंक छोड़ देता है, और os.stat
उन पर विफल हो जाएगा।
यह सीखने के लिए एक बुनियादी कदम है:
import os, stat, sys
import time
dirpath = sys.argv[1] if len(sys.argv) == 2 else r'.'
listdir = os.listdir(dirpath)
for i in listdir:
os.chdir(dirpath)
data_001 = os.path.realpath(i)
listdir_stat1 = os.stat(data_001)
listdir_stat2 = ((os.stat(data_001), data_001))
print time.ctime(listdir_stat1.st_ctime), data_001
एलेक्स कॉवेन्ट्री का उत्तर एक अपवाद उत्पन्न करेगा यदि फ़ाइल एक असंबद्ध फ़ाइल के लिए एक सिमलिंक है, तो निम्न कोड सही करता है:
import time
import datetime
sorted(filter(os.path.isfile, os.listdir('.')),
key=lambda p: os.path.exists(p) and os.stat(p).st_mtime or time.mktime(datetime.now().timetuple())
जब फ़ाइल मौजूद नहीं है, तो अब () का उपयोग किया जाता है, और सूची के बहुत अंत में सिमलिंक जाएगा।
यहां एक सरल युगल लाइनें हैं जो एक्सटेंशन के लिए दिखता है और साथ ही एक सॉर्ट विकल्प भी प्रदान करता है
def get_sorted_files(src_dir, regex_ext='*', sort_reverse=False):
files_to_evaluate = [os.path.join(src_dir, f) for f in os.listdir(src_dir) if re.search(r'.*\.({})$'.format(regex_ext), f)]
files_to_evaluate.sort(key=os.path.getmtime, reverse=sort_reverse)
return files_to_evaluate
यह मेरा संस्करण था:
import os
folder_path = r'D:\Movies\extra\new\dramas' # your path
os.chdir(folder_path) # make the path active
x = sorted(os.listdir(), key=os.path.getctime) # sorted using creation time
folder = 0
for folder in range(len(x)):
print(x[folder]) # print all the foldername inside the folder_path
folder = +1