Скрипт Python для проверки самого последнего измененного файла - противоречивые результаты - PullRequest
0 голосов
/ 16 июля 2011

Я нашел этот пост в stackoverflow, который я и хотел интегрировать в более крупный скрипт, который я пишу: Найдите самую новую папку в каталоге на Python

Я хочу проверить наличие самого нового файла или папки, поэтому изменил скрипт для проверки следующим образом:

#!/usr/bin/env python3.1

import os

def allFilesIn(b='.'):
    result = []
    for d in os.listdir(b):
        bd = os.path.join(b, d)
    result.append(bd)
    return result

latest_subdir = max(allFilesIn('/tmp/testforlatest'), key=os.path.getmtime)

print(latest_subdir)

Однако я получаю результаты следующим образом:

> touch /tmp/testforlatest/file1
> ls -t -1 /tmp/testforlatest/ | head -1
file1
> /tmp/testfornewestfile.py 
/tmp/testforlatest/file1
> touch /tmp/testforlatest/file2
> ls -t -1 /tmp/testforlatest/ | head -1
file2
> /tmp/testfornewestfile.py 
/tmp/testforlatest/file1
> mkdir /tmp/testforlatest/folder1
> ls -t -1 /tmp/testforlatest/ | head -1
folder1/
> /tmp/testfornewestfile.py 
/tmp/testforlatest/folder1
> mkdir /tmp/testforlatest/folder2
> ls -t -1 /tmp/testforlatest/ | head -1
folder2/
> /tmp/testfornewestfile.py 
/tmp/testforlatest/folder1
> touch /tmp/testforlatest/file3
> ls -t -1 /tmp/testforlatest/ | head -1
file3
> /tmp/testfornewestfile.py 
/tmp/testforlatest/folder1

Может, кто-то возражает объяснить, почему это происходит и что я делаю неправильно.

другая информация, которая может быть полезна:

> python3.1 --version
Python 3.1.3
> cat /etc/debian_version 
6.0.2

1 Ответ

1 голос
/ 16 июля 2011

Ваша функция allFilesIn возвращает только последний файл, возвращенный os.listdir, потому что вы добавляете результаты вне цикла for.Вы, вероятно, имели в виду это:

def allFilesIn(b='.'):
    result = []
    for d in os.listdir(b):
        bd = os.path.join(b, d)
        result.append(bd)
    return result

В качестве отступления предпочтительно использовать строчные буквы и подчеркивания для имен функций на PEP8 .Вы также можете довольно легко сжать эту функцию в виде списка:

def all_files_in(path='.'):
    return [os.path.join(path, f) for f in os.listdir(path)]
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...