57

我正在尝试在 Python 中查找特定类型的最新修改(从这里开始“最新”)文件。我目前可以得到最新的,但不管是什么类型。我只想获得最新的 MP3 文件。

目前我有:

import os
  
newest = max(os.listdir('.'), key = os.path.getctime)
print newest

有没有办法修改它只给我最新的 MP3 文件?

4

6 回答 6

94

使用glob.glob

import os
import glob
newest = max(glob.iglob('*.[Mm][Pp]3'), key=os.path.getctime)
于 2013-08-16T17:42:59.187 回答
11

假设您已导入 os 并定义了路径,这将起作用:

dated_files = [(os.path.getmtime(fn), os.path.basename(fn)) 
               for fn in os.listdir(path) if fn.lower().endswith('.mp3')]
dated_files.sort()
dated_files.reverse()
newest = dated_files[0][1]
print(newest)
于 2013-08-16T18:16:51.500 回答
2

试试这个人:

import os
print max([f for f in os.listdir('.') if f.lower().endswith('.mp3')], key=os.path.getctime)
于 2013-08-16T17:50:14.197 回答
0

出于学习目的,我的代码与@Kevin Vincent 的代码基本相同,虽然没有那么紧凑,但更易于阅读和理解:

import datetime
import glob
import os

mp3Dir = "C:/mp3Dir/"
filesInmp3dir = os.listdir(mp3Dir)

datedFiles = []
for currentFile in filesInmp3dir:
    if currentFile.lower().endswith('.mp3'):
        currentFileCreationDateInSeconds = os.path.getmtime(mp3Dir + "/" + currentFile)
        currentFileCreationDateDateObject = datetime.date.fromtimestamp(currentFileCreationDateInSeconds)
        datedFiles.append([currentFileCreationDateDateObject, currentFile])
        datedFiles.sort();
        datedFiles.reverse();

print datedFiles
latest = datedFiles[0][1]
print "Latest file is: " + latest
于 2018-01-08T12:58:21.147 回答
0

这是使用该模块的@falsetru答案的稍微面向对象的版本。pathlib另一个区别是,与他不同的是,它会找到最近修改(未创建)的文件。

使用Path.glob()

import os
from pathlib import Path

newest = max(Path('.').glob('*.[Mm][Pp]3'), key=os.path.getmtime)
于 2021-11-01T08:15:02.630 回答
-2
for file in os.listdir(os.getcwd()):
    if file.endswith(".mp3"):
        print "",file
        newest = max(file , key = os.path.getctime)
        print "Recently modified Docs",newest
于 2014-02-07T06:19:29.750 回答