Apa cara terbaik untuk mendapatkan daftar semua file dalam direktori, diurutkan berdasarkan tanggal [dibuat | dimodifikasi], menggunakan python, pada mesin windows?
129
Perbarui : untuk mengurutkan dirpath
entri berdasarkan tanggal modifikasi dengan Python 3:
import os
from pathlib import Path
paths = sorted(Path(dirpath).iterdir(), key=os.path.getmtime)
(letakkan jawaban @ Pygirl di sini untuk visibilitas lebih besar)
Jika Anda sudah memiliki daftar nama file files
, maka untuk mengurutkannya berdasarkan waktu pembuatan pada Windows:
files.sort(key=os.path.getctime)
Daftar file yang bisa Anda peroleh, misalnya, menggunakan glob
seperti yang ditunjukkan pada jawaban @ Jay .
Jawabannya tua
Berikut adalah lebih verbose versi @Greg Hewgill
's jawaban . Ini adalah yang paling sesuai dengan persyaratan pertanyaan. Itu membuat perbedaan antara tanggal pembuatan dan modifikasi (setidaknya pada Windows).
#!/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)
Contoh:
$ python stat_creation_date.py
Thu Feb 11 13:31:07 2009 stat_creation_date.py
cdate
adalah jumlah float detik sejak Epoch.stat
sekali per dir.entry.Saya telah melakukan ini di masa lalu untuk skrip Python untuk menentukan file yang terakhir diperbarui dalam direktori:
Itu harus melakukan apa yang Anda cari berdasarkan file mtime.
EDIT : Perhatikan bahwa Anda juga dapat menggunakan os.listdir () sebagai ganti glob.glob () jika diinginkan - alasan saya menggunakan glob dalam kode asli saya adalah bahwa saya ingin menggunakan glob untuk hanya mencari file dengan set tertentu ekstensi file, yang glob () lebih cocok untuk. Untuk menggunakan listdir, inilah tampilannya:
sumber
files.sort(key=lambda fn: os.path.getmtime(os.path.join(search_dir, fn)))
files.sort(key=os.path.getmtime)
harus bekerja (tanpalambda
).Ada
os.path.getmtime
fungsi yang memberikan jumlah detik sejak zaman dan harus lebih cepat darios.stat
.sumber
Ini versi saya:
Pertama, kami membuat daftar nama file. isfile () digunakan untuk melewati direktori; dapat dihilangkan jika direktori harus dimasukkan. Kemudian, kami mengurutkan daftar di tempat, menggunakan tanggal modifikasi sebagai kuncinya.
sumber
a[-5:]
Inilah satu kalimat:
Ini memanggil os.listdir () untuk mendapatkan daftar nama file, lalu memanggil os.stat () untuk masing-masing nama untuk mendapatkan waktu pembuatan, kemudian mengurutkannya terhadap waktu pembuatan.
Perhatikan bahwa metode ini hanya memanggil os.stat () satu kali untuk setiap file, yang akan lebih efisien daripada memanggilnya untuk setiap perbandingan dalam bentuk.
sumber
Tanpa mengubah direktori:
sumber
Dalam python 3.5+
sumber
f.stat().st_ctime
saja.Inilah jawaban saya menggunakan glob tanpa filter jika Anda ingin membaca file dengan ekstensi tertentu dalam urutan tanggal (Python 3).
sumber
sumber
Anda bisa menggunakan
os.walk('.').next()[-1]
alih-alih memfilteros.path.isfile
, tapi itu meninggalkan symlink yang mati dalam daftar, danos.stat
akan gagal pada mereka.sumber
atau
atau
di mana m waktu diubah waktu.
sumber
ini adalah langkah dasar untuk belajar:
sumber
Jawaban Alex Coventry akan menghasilkan pengecualian jika file tersebut merupakan symlink ke file yang tidak ada, kode berikut mengoreksi jawaban itu:
Ketika file tidak ada, sekarang () digunakan, dan symlink akan pergi di bagian paling akhir daftar.
sumber
Berikut adalah beberapa garis sederhana yang mencari ekstensi serta menyediakan opsi pengurutan
sumber
Untuk kelengkapan dengan
os.scandir
(2x lebih cepat daripathlib
):sumber
Ini versi saya:
sumber
Mungkin Anda harus menggunakan perintah shell. Di Unix / Linux, find piped with sort mungkin akan dapat melakukan apa yang Anda inginkan.
sumber