Чтение файлов CSV в фрейм данных Pandas с FTP с помощью Python ftplib

Я получаю сообщение об ошибке «[Errno 2] Нет такого файла или каталога» при попытке загрузить файлы с FTP-сервера в фрейм данных Pandas. Файлы находятся в корневом каталоге FTP.

Я предполагаю, что функция pd.read_csv() просматривает мою локальную файловую систему... то есть по локальному пути, где находится скрипт.... Но я не понимаю, как это изменить.

def fetch_files(site, username, password, directory: str = '/', filematch: str = '*.csv'):
    with ftplib.FTP(site) as ftp:
        # pass the url without protocol
        ftp = ftplib.FTP(site)
        # pass credentials if anonymous access is not allowed
        ftp.login(username, password)
        ftp.cwd(directory)
        list_ = []
        for file_ in ftp.nlst(filematch):
            print(file_) # This works
            df = pd.read_csv(file_, index_col=None, header=0) # This fails
            list_.append(df)

Или мне придется использовать метод ftp.retrlines()? Если да, то в чем разница между параметрами LIST и MLSD?

На заметку: файлы в CSV содержат HTML-код, например &, который отключает массовую вставку SQL. Вот почему я читаю их в фрейме данных, чтобы изменить кодировку и объединить отдельные файлы. Есть ли более быстрый способ сделать это напрямую через модуль Python csv? Думаю, так будет быстрее?

заранее спасибо

Почему в Python есть оператор "pass"?
Почему в Python есть оператор "pass"?
Оператор pass в Python - это простая концепция, которую могут быстро освоить даже новички без опыта программирования.
Некоторые методы, о которых вы не знали, что они существуют в Python
Некоторые методы, о которых вы не знали, что они существуют в Python
Python - самый известный и самый простой в изучении язык в наши дни. Имея широкий спектр применения в области машинного обучения, Data Science,...
Основы Python Часть I
Основы Python Часть I
Вы когда-нибудь задумывались, почему в программах на Python вы видите приведенный ниже код?
LeetCode - 1579. Удаление максимального числа ребер для сохранения полной проходимости графа
LeetCode - 1579. Удаление максимального числа ребер для сохранения полной проходимости графа
Алиса и Боб имеют неориентированный граф из n узлов и трех типов ребер:
Оптимизация кода с помощью тернарного оператора Python
Оптимизация кода с помощью тернарного оператора Python
И последнее, что мы хотели бы показать вам, прежде чем двигаться дальше, это
Советы по эффективной веб-разработке с помощью Python
Советы по эффективной веб-разработке с помощью Python
Как веб-разработчик, Python может стать мощным инструментом для создания эффективных и масштабируемых веб-приложений.
1
0
240
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Используйте FTP.retrbinary и BytesIO, чтобы загрузить файл в память, а затем передать файлоподобный объект в памяти read_csv:

flo = BytesIO()
ftp.retrbinary('RETR ' + file_, flo.write)
flo.seek(0)
pd.read_csv(flo, ...)

Аналогичный вопрос: Чтение файлов с FTP-сервера в DataFrame в Python


Вышеупомянутый файл загружает весь CSV-файл в память, и только затем он его анализирует. Если вы хотите просмотреть файл по мере его загрузки, для этого, вероятно, потребуется реализовать интеллектуальный пользовательский файлоподобный объект. Что не просто.

На вопрос, который делает что-то подобное, смотрите мой ответ на:
Получите имена файлов внутри zip-файла на FTP-сервере, не загружая весь архив.

Другие вопросы по теме