Python

2016-09-05 13 views
27

'u kullanarak bir klasördeki en son dosya nasıl elde edilir python kullanarak bir klasörün en son dosyasını almam gerekir. Aşağıda hatası alıyorumPython

max(files, key = os.path.getctime) 

: kodunu kullanırken

FileNotFoundError: [WinError 2] The system cannot find the file specified: 'a'

+0

dosya bulmaya gibidir: Böyle (denenmemiş) olarak

? İlgili kodu quesiton'a ekleyin. –

+0

Neden sizin için çalışmıyor olabileceğini tahmin ediyorum: dosya adı dosyalarının bir listesi veya tek bir dosya dizisi "dosyaları" mı? – mpurg

cevap

77

yanlıştır. Aşağıdaki kodu kullanın.

import glob 
import os 

list_of_files = glob.glob('/path/to/folder/*') # * means all if need specific format then *.csv 
latest_file = max(list_of_files, key=os.path.getctime) 
print latest_file 
+0

İyi çalışıyordu. Teşekkürler – garlapak

+6

Neden düşüş var? herhangi bir soru sormak için downvoter çekinmeyin lütfen –

+0

@garlapak çalıştığı memnun. mümkünse tavsiye et –

2

deneyin oluşturma zaman öğeleri sıralamak için. Aşağıdaki örnek, bir klasördeki dosyaları sıralar ve en yeni olan ilk öğeyi alır. Hiç files değişkenine atanan Ne

import glob 
import os 

files_path = os.path.join(folder, '*') 
files = sorted(
    glob.iglob(files_path), key=os.path.getctime, reverse=True) 
print files[0] 
0

Önce bir fonksiyon get_latest_file

def get_latest_file(path, *paths): 
    fullpath = os.path.join(path, paths) 
    ... 
get_latest_file('example', 'files','randomtext011.*.txt') 

Ayrıca docstring'ini kullanabilir define (cevabını geliştirmek için Düzenlendi)! Python 3 kullanırsanız

def get_latest_file(path, *paths): 
    """Returns the name of the latest (most recent) file 
    of the joined path(s)""" 
    fullpath = os.path.join(path, *paths) 

, bunun yerine iglob kullanabilirsiniz.

Komple kod son dosyanın adını döndürmek için:

def get_latest_file(path, *paths): 
    """Returns the name of the latest (most recent) file 
    of the joined path(s)""" 
    fullpath = os.path.join(path, *paths) 
    files = glob.glob(fullpath) # You may use iglob in Python3 
    if not files:    # I prefer using the negation 
     return None      # because it behaves like a shortcut 
    latest_file = max(files, key=os.path.getctime) 
    _, filename = os.path.split(latest_file) 
    return filename 
+0

'JuniperAccessLog-bağımsız-FCL_VPN' bölümünü nereden aldınız? – glglgl

+0

@glglgl Tamam, düzeltdim. Üzgünüm –

4
max(files, key = os.path.getctime) 

oldukça eksik kodudur. files nedir? Muhtemelen os.listdir()'dan çıkan dosya adlarının bir listesidir.

Ancak bu liste yalnızca dosya adı parçalarını listeler (a. K. A. "Basenames"), çünkü yolları ortaktır. Düzgün kullanmak için, onu yönlendiren yolla birleştirmeniz gerekir (ve onu almak için kullanılır).

def newest(path): 
    files = os.listdir(path) 
    paths = [os.path.join(path, basename) for basename in files] 
    return max(paths, key=os.path.getctime) 
+0

Aşağı inenlerin tam olarak neyin yanlış olduğunu açıklayabileceğinden eminim. – glglgl

+1

Dunno, sizin için test edildi, işe yarıyor gibi görünüyor. Bunun üzerine, biraz açıklamaya özen gösteren tek kişi sizdiniz. Kabul edilen cevabı okumak bana 'glob' şeyin gerekli olduğunu düşünürken, kesinlikle değil. Teşekkürler –