ftplib, проверяющий, является ли файл папкой?

1118 Похоже, что все вышеперечисленные ответы решают проблему. Еще один момент: вместо pd.set_option('option_name'), вы можете использовать (автозаполнение)

pd.options.display.width = None

См. Pandas doc: Опции и настройки:

Опции имеют полное «пунктирное» имя без учета регистра (например, display.max_rows). Вы можете получить / установить параметры напрямую как атрибуты атрибута верхнего уровня options:

In [1]: import pandas as pd

In [2]: pd.options.display.max_rows
Out[2]: 15

In [3]: pd.options.display.max_rows = 999

In [4]: pd.options.display.max_rows
Out[4]: 999

[...]

для параметров max_...:

max_rows и max_columns используются в __repr__() методах, чтобы решить, использовать ли to_string() или info() для визуализации объекта в строку. В случае, если python / IPython работает в терминале, это может быть установлено в 0, и pandas будет правильно автоматически определять ширину терминала и переключаться на меньший формат в случае, если все столбцы не поместятся вертикально. Записная книжка IPython, IPython qtconsole или IDLE не работают в терминале, и, следовательно, невозможно выполнить правильное автоопределение. Значение None ’означает неограниченное. [выделено не оригинально]

для параметра width:

Ширина дисплея в символах. В случае, если python / IPython работает в терминале, это может быть установлено на None, и pandas будет правильно автоматически определять ширину. Обратите внимание, что записная книжка IPython, IPython qtconsole или IDLE не работают в терминале и, следовательно, невозможно правильно определить ширину.

15
задан UberJumper 6 July 2009 в 17:49
поделиться

4 ответа

def is_file(filename):
    current = ftp.pwd()
    try:
        ftp.cwd(filename)
    except:
        ftp.cwd(current)
        return True
    ftp.cwd(current)
    return False

Вот еще одно решение. На полпути к написанию я понял, что это проблема. Если у вас нет разрешения на изменение папки, вместо этого она будет прочитана как файл. Он будет работать, если у вас есть доступ к любой папке.

Я все еще разместил его, потому что, возможно, он даст некоторые идеи.

1
ответ дан 1 December 2019 в 03:35
поделиться

FTP.dir возвращает список каталогов, который вы можете проанализировать с помощью функции обратного вызова, чтобы узнать, является ли это каталогом. Например, вот так:

def parse(line):
    if line[0] == 'd':
        print(line.rpartition(' ')[2])   # gives you the name of a directory

ftp.dir(parse)
4
ответ дан 1 December 2019 в 03:35
поделиться
def is_file(filename):
    return ftp.size(filename) is not None

This works because ftp.size returns None if it is a directory.

2
ответ дан 1 December 2019 в 03:35
поделиться

FTP является довольно простым протоколом, и нет встроенного запроса протокола, позволяющего получить тип (файл, dir) каждого узла, так что эвристический, как тот, что вы нашли, является единственным решением.

Если получение размера каждого узла не работает, возможно, следует рассмотреть возможность вызова FTP.nlst() для каждого из этих узлов: ошибки будут не dir, а файлы.

.
7
ответ дан 1 December 2019 в 03:35
поделиться
Другие вопросы по тегам:

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