Ссылка метода экземпляра нулевого объекта [дубликат]

Для тех, кто ищет полное решение для поиска последнего файла в папке:

Если ваш FTP-сервер поддерживает команду MLSD, решение легко:

entries = list(ftp.mlsd())
entries.sort(key = lambda entry: entry[1]['modify'], reverse = True)
latest_name = entries[0][0]
print(latest_name)

Если вам нужно полагаться на устаревшую команду LIST, вы должны проанализировать ее листинг, который он возвращает.

Общий список * nix выглядит следующим образом:

-rw-r--r-- 1 user group           4467 Mar 27  2018 file1.zip
-rw-r--r-- 1 user group         124529 Jun 18 15:31 file2.zip

С таким списком этот код будет делать:

from dateutil import parser

# ...

lines = []
ftp.dir("", lines.append)

latest_time = None
latest_name = None

for line in lines:
    tokens = line.split(maxsplit = 9)
    time_str = tokens[5] + " " + tokens[6] + " " + tokens[7]
    time = parser.parse(time_str)
    if (latest_time is None) or (time > latest_time):
        latest_name = tokens[8]
        latest_time = time

print(latest_name)

Это довольно хрупкий подход.


Более надежный, но менее эффективный способ - это используйте команду MDTM для получения временных меток отдельных файлов / папок:

names = ftp.nlst()

latest_time = None
latest_name = None

for name in names:
    time = ftp.sendcmd("MDTM " + name)
    if (latest_time is None) or (time > latest_time):
        latest_name = name
        latest_time = time

print(latest_name)

Некоторые FTP-серверы поддерживают собственный нестандартный переключатель -t для NLST (или LIST) команда.

lines = ftp.nlst("-t")

latest_name = lines[-1]

См. Как получить файлы в папке FTP, отсортированные по времени модификации .


Независимо от того, какой подход вы используете, latest_name, вы загружаете его как любой другой файл:

file = open(latest_name, 'wb')
ftp.retrbinary('RETR '+ latest_name, file.write)

См. также Получите последнее имя папки FTP в Python .

10
задан Michael 7 June 2016 в 14:29
поделиться

1 ответ

Есть ли причина, по которой можно создавать ссылки на ссылки на ссылку null в Java?

Это не так, но, видимо, в Eclipse есть ошибка в этом отношении (править: с тех пор как исправлено ). Согласно спецификации, и когда вы используете инструменты JDK, он не работает с NPE на линии Runnable fn = test::m;.

Доказательство: http://ideone.com/APWXna (или компилировать и запускать его локально с помощью javac и java, а не Eclipse)

Теория: из JLS §15.13.3 :

Во-первых, если ссылочное выражение метода начинается с ExpressionName или Primary , это подвыражение оценивается. Если подвыражение оценивается как null, возникает NullPointerException, и выражение ссылки метода заканчивается внезапно.

(Мой акцент.)

12
ответ дан 4 revs 22 August 2018 в 10:05
поделиться
Другие вопросы по тегам:

Похожие вопросы: